【发布时间】:2019-04-15 10:40:46
【问题描述】:
好的,
当我专注于我的 EditText 并且键盘等正在显示时。我在edittext(取消按钮)的末尾单击我的drawable。我通过 onTouchListener 识别此事件并自己隐藏键盘、清除焦点等。
但是,当我“触摸”取消按钮时,它会隐藏键盘,但焦点仍停留在编辑文本上。表示光标仍在显示,但不闪烁。因此,当我再次单击编辑文本以获得焦点时,它会显示复制/粘贴等选项,就像我长按光标并且不显示键盘一样。
但是当我“按下”取消按钮时,它会清除焦点,隐藏键盘,最重要的是它会隐藏光标,从而完全移除焦点。然后,当我再次单击编辑文本时,它会重新获得焦点并显示键盘。
这是什么奇怪的行为,我如何让它总是做“按”行为。
我的代码:
searchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getRawX() >= searchView.getRight() - searchView.getCompoundDrawables()[2].getBounds().width()) {
hideKeyboard(v);
isSearching = false;
searchView.setText("");
searchView.clearFocus();
searchView.setFocusable(false);
searchView.setFocusableInTouchMode(false);
getView().requestFocus(); // parent has both focusables true
searchView.setFocusable(true);
searchView.setFocusableInTouchMode(true);
fetchArticles();
return true;
}
}
return false;
}
});
如您所见,我正在尽我所能来始终获得相同的行为。然而到目前为止还没有运气。希望大家帮帮我!
【问题讨论】:
-
你为什么不想要焦点?
-
你确定
getView().requestFocus()中的getView()返回父视图吗?看起来您请求的是同一个视图而不是父视图的焦点。 -
是的,很确定它指的是 Fragment.getView();。我也尝试过其他视图。
-
searchView 是您 XML 中最后一个可聚焦的视图吗?因为如果是,您将面临 Android 系统问题。你看,你试图将焦点从视图中清除,但是它没有其他视图可以关注,这就是光标没有消失的原因