Android:EditText 上的软键盘退格键不起作用

Android: soft keyboard Backspace on EditText not working

事情是这样的: Activity A 和 B 有一个 EditText,他们都有 IME_SEARCH。输入只能通过三星平板电脑上的软键盘完成。 在 Activity A 上,我可以毫无问题地使用 EditText。问题是,在 Activity B 上,我无法在点击 'space' 或使用建议中的单词后用返回 space 擦除文本。它的行为就像那里不再有文字一样。如果我输入新字符,我可以将它们删除到 space.

要点:

  1. 包含 EditTexts 的视图层次结构相同
  2. 配置 IME_SEARCH 处理(通过 setOnEditorActionListener)的代码是相同的
  3. 两者的TextWatcher也是一样的
  4. 在清单中,两个活动都配置了
    android:configChanges="keyboardHidden|keyboard|orientation"
    android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
    

我在两个 TextWatcher 的方法 beforeTextChanged 上设置了一个断点。我插入了 'space' 并点击了 'backspace'。在 activity A 的 Edittext 上,该方法被触发,但在 activity B 上,它没有被触发。我看不出发生这种情况的原因,因为 Edittext 的属性配置相同。 我也尝试删除 IME 选项,但行为保持不变。

有人知道会发生什么吗?

编辑 1:

searchTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() == 0) {
                    btnClear.setVisibility(View.GONE);
                } else{
                    btnClear.setVisibility(View.VISIBLE);
                }
            }
        });

searchTxt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    buildGrid();
                    return true;
                }
                return false;
            }
        });

编辑 2: 布局层次结构如下。

<LinearLayout
    ... >

    <include layout="@layout/title_bar" />
    <RelativeLayout
        ...>
        <EditText
            ...>

问题在于,出于某种原因,Activity B 覆盖了 dispatchKeyEvent() 并始终返回 true。删除它解决了问题。

我遇到了与您面临的类似问题,我不知何故设法找到了解决方案。显然,我将 setOnKeyListener 设置为 'return true'。在我将其更改为 'return false' 后,phone 键盘与退格键完美配合,再次在 edittext 上正常运行。希望这会有所帮助:

.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
  ...
  return false;
                }
        });