Android:EditText 上的软键盘退格键不起作用
Android: soft keyboard Backspace on EditText not working
事情是这样的:
Activity A 和 B 有一个 EditText
,他们都有 IME_SEARCH
。输入只能通过三星平板电脑上的软键盘完成。
在 Activity A 上,我可以毫无问题地使用 EditText
。问题是,在 Activity B 上,我无法在点击 'space' 或使用建议中的单词后用返回 space 擦除文本。它的行为就像那里不再有文字一样。如果我输入新字符,我可以将它们删除到 space.
要点:
- 包含
EditTexts
的视图层次结构相同
- 配置
IME_SEARCH
处理(通过 setOnEditorActionListener
)的代码是相同的
- 两者的
TextWatcher
也是一样的
- 在清单中,两个活动都配置了
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;
}
});
事情是这样的:
Activity A 和 B 有一个 EditText
,他们都有 IME_SEARCH
。输入只能通过三星平板电脑上的软键盘完成。
在 Activity A 上,我可以毫无问题地使用 EditText
。问题是,在 Activity B 上,我无法在点击 'space' 或使用建议中的单词后用返回 space 擦除文本。它的行为就像那里不再有文字一样。如果我输入新字符,我可以将它们删除到 space.
要点:
- 包含
EditTexts
的视图层次结构相同 - 配置
IME_SEARCH
处理(通过setOnEditorActionListener
)的代码是相同的 - 两者的
TextWatcher
也是一样的 - 在清单中,两个活动都配置了
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;
}
});