你好 android开发人员,
如果您正在阅读本文,则很可能会通过更有效地管理软键盘的可见性和EditText视图的重点来改善应用程序的用户体验。当用户单击应用程序中的其他位置时,您可能想知道如何自动隐藏键盘并从Edittext(或其子类)中删除焦点。在这篇文章中,我们将解决这种常见情况的简单解决方案。
DispatchTouchEvent()方法
潜入解决方案之前,让我们介绍DispatchTouchEvent()。这是每当派遣触摸事件时(即用户与触摸屏交互时),这是一种称为Android活动类方法。触摸事件包含有关互动的关键信息,例如触摸的位置和类型(例如,向下,移动,向上)。
解决方案解释了
这是处理此UX增强的代码段:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int) event.getRawX(), (int) event.getRawY())) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
让我们分解一下:
检查action_down:我们对“ down”事件感兴趣,这表示触摸的开始(即,用户的手指首先与屏幕接触)。我们使用if(event.getAction()== MotionEvent.action_down)检查此事件。
识别当前焦点: getCurrentFocus()函数用于识别当前焦点的视图 - 通常是用户与。
验证是否是deDittext: if(v instance of dedittext)语句检查当前焦点视图是否是EditText的实例。我们要确保只有在EditText失去焦点时才发生以下操作(例如隐藏键盘)。
定义触摸边界:我们创建一个rect对象(表示矩形)来表示屏幕上的EditText视图的可见区域。
检测触摸外部的触摸:我们然后检查触摸事件是否在此矩形内。如果不是,则意味着用户已经在EditText视图之外触摸。
删除焦点并隐藏键盘:如果在EditText之外检测到触摸,我们将从EditText中清除焦点并获取输入方法管理器(一种处理软键盘的系统服务)。我们用它隐藏键盘。
传递事件:最后,我们将触摸事件传递给超级班级的dispatchTouchEvent()。这至关重要,因为触摸事件可能需要其他视图或系统的进一步处理。
使用TextInputEditText
对于那些想知道TextInputeDittext(EditText的子类)的人,请不要担心!此代码也非常适合TextInputEditText视图。如果您希望专门将此功能应用于textInputEdittext视图,则可以使用(v instance odittext)替换(v instance of textInputeDittext)。
包起来
这种简单而有效的方法可以大大改善您的Android应用程序的用户体验,尤其是在使用表单或文本输入时。请记住,无缝的用户体验通常会带来更高的用户满意度。
保持编码和增强!