这是发生的事情:
活动A和B有EditText
,他们都有IME_SEARCH
。输入仅通过SAMSUNG平板电脑上的软键盘完成。
在活动A上,我可以毫无问题地使用EditText
。事情是,在活动B上,我在点击“空格”或每次使用建议中的单词时都无法用退格键擦除文本。它的行为就像那里没有文字了。如果我输入新字符,我可以将它们擦除到空间。
重点:
EditTexts
的视图层次结构相同IME_SEARCH
处理(通过setOnEditorActionListener
)的代码是相同的TextWatcher
也相同android:configChanges="keyboardHidden|keyboard|orientation" android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
我在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
...>
答案 0 :(得分:2)
问题在于,由于某种原因,活动B覆盖dispatchKeyEvent()
并始终返回true
。删除它解决了这个问题。