gpt4 book ai didi

java - : some keyboard keys are pressed and when user clicks on something else in the activity时强制EditText失去焦点

转载 作者:行者123 更新时间:2023-11-30 08:32:03 24 4
gpt4 key购买 nike

我知道这个问题以前曾以多种不同的方式被问过,但即使我已经查看了许多其他有关 EditText 焦点的相关问题,我也没有找到我的解决方案。

这是我想要实现的:

  • 当用户完成对 EditText 的编辑后,我希望它失去焦点。

  • 当用户点击 EditText 外部时,我希望这样的 EditText 丢失专注。

  • 每当软键盘隐藏或隐藏时我想要 EditText失去焦点。

  • 只要用户在软键盘上按下 ENTER 或 BACK ARROW,EditText 焦点就应该被清除

这是我目前拥有的:

我在一个 Activity 中有两个 EditText,为了简单起见,我将它们称为 EditText_1 和 EditText_2,以便我们知道我在谈论哪个 EditText。

  1. 当用户启动 Activity 时,EditText_1 将没有焦点,闪烁的光标和软键盘将被隐藏。我已经使用以下方法修复了该问题;

    android:focusableInTouchMode="true"

    android:focusable="true"

  2. 在第 1 部分中的先前修复之后,当我启动 Activity 并单击任何 EditText 时,它将获得焦点,但是,当我完成编辑此类单击的 EditText 并且软键盘隐藏时,EditText 将不会失去焦点,光标仍会闪烁。

    另一个例子发生在我编辑 EditText 并单击 editText 之外的任何其他按钮时,它不会强制 EditText 失去焦点或隐藏键盘。

我目前的解决方案是

public void onFocusChange(View v, boolean hasFocus){...}

因此,它将调用一些方法,例如强制 EditText 失去焦点:

EditText.clearFocus();

一旦我知道 EditText 失去焦点,就不要显示烦人的闪烁光标:

EditText.setCursorVisible(false);

但是,因为点击 Done 或在 EditText 外部不会强制它失去焦点,所以不会一直调用 onFocusChange(如提供的示例中所示)。

我不能接受的一些解决方案是:

在 XML Activity 文件中将光标可见性设置为 false,并且永远不会在任何地方将其更改回 true。

setCursorVisible(false);

我希望光标在需要时可见,在不需要时隐藏。

有一个按钮需要被用户点击,以便在这个按钮内调用所有需要的方法。我的意思是,它根本不是用户友好的。用户不希望被迫单击按钮只是为了隐藏所有焦点、闪烁的光标...

这就是你们中的许多人会告诉我的部分,这些问题中的每一个都已在不同的问题中得到解决。但是,我无法实现多个解决方案来完成前面所述的所有要点。

最佳答案

要使 editText 在您按下键盘外部时失去焦点,您可以尝试将 setOnTouchListener 设置为显示键盘时可见的 View 。例如,它可能是父布局、listView、recyclerView 或任何其他尺寸较大的 View 。为此,只需在 Activity 中的 onCreate 方法中添加以下代码:

findViewById(R.id.loginLayout).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
usernameEditText.clearFocus();
passwordEditText.clearFocus();
return false;
}
});

要使 editText 在按下键盘上的某个按钮时失去焦点和/或隐藏键盘,您可以使用以下代码。有一个 Enter 键监听器的例子。您可以在 official documentation 上找到所有其他键.

yourEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_UP) {
yourEditText.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
return false;
}
});

关于java - : some keyboard keys are pressed and when user clicks on something else in the activity时强制EditText失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com