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

lui*_*fzs 2 android soft-keyboard android-edittext

发生的情况是这样的:活动 A 和 B 有一个EditText并且它们都有IME_SEARCH。只能通过 SAMSUNG 平板电脑上的软键盘进行输入。在 Activity AI 上可以毫无问题地使用EditText。问题是,在 Activity BI 上,在我点击“空格”后或每当我使用建议中的单词时,无法使用退格键删除文本。它的表现就像那里不再有文字了。如果我输入新字符,我可以将它们删除到空格。

要点:

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

beforeTextChanged我在两者的方法上设置了断点TextWatcher。我插入了一个“空格”并按了“退格键”。在活动 A上Edittext,该方法被触发,但在活动 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;
            }
        });
Run Code Online (Sandbox Code Playgroud)

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

<LinearLayout
    ... >

    <include layout="@layout/title_bar" />
    <RelativeLayout
        ...>
        <EditText
            ...>
Run Code Online (Sandbox Code Playgroud)

lui*_*fzs 6

问题是,由于某种原因,Activity B 被覆盖dispatchKeyEvent()并且总是返回true. 删除它解决了问题。