Android:EditText上的软键盘Backspace无法正常工作

时间:2016-10-07 11:59:59

标签: android android-edittext soft-keyboard

这是发生的事情: 活动A和B有EditText,他们都有IME_SEARCH。输入仅通过SAMSUNG平板电脑上的软键盘完成。 在活动A上,我可以毫无问题地使用EditText。事情是,在活动B上,我在点击“空格”或每次使用建议中的单词时都无法用退格键擦除文本。它的行为就像那里没有文字了。如果我输入新字符,我可以将它们擦除到空间。

重点:

  1. 包含EditTexts的视图层次结构相同
  2. 配置IME_SEARCH处理(通过setOnEditorActionListener)的代码是相同的
  3. 两者的TextWatcher也相同
  4. 在Manifest中,两个活动都配置为
    android:configChanges="keyboardHidden|keyboard|orientation"
    android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
    
  5. 我在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;
                }
            });
    

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

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

1 个答案:

答案 0 :(得分:2)

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