隐藏软键盘并从Android中的EditText中删除焦点
#java #android #ux

你好 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应用程序的用户体验,尤其是在使用表单或文本输入时。请记住,无缝的用户体验通常会带来更高的用户满意度。

保持编码和增强!