好的,每个人都知道要隐藏键盘,您需要实现:
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
但这里最重要的是当用户触摸或选择任何其他不是 EditText
或软键盘的地方时,如何隐藏键盘?
我尝试在我的父母 onTouchEvent()
上使用 Activity
但这只有在用户触摸任何其他视图之外并且没有滚动视图时才有效。
我试图实现一个触摸、点击、聚焦监听器,但没有成功。
我什至尝试实现自己的滚动视图来拦截触摸事件,但我只能获取事件的坐标而不是单击的视图。
有没有标准的方法来做到这一点?在 iPhone 中,这真的很容易。
原文由 htafoya 发布,翻译遵循 CC BY-SA 4.0 许可协议
以下代码段只是隐藏了键盘:
您可以将其放在实用程序类中,或者如果您在活动中定义它,请避免使用活动参数,或调用
hideSoftKeyboard(this)
。最棘手的部分是何时调用它。您可以编写一个方法,在您的活动中遍历每个
View
,并检查它是否是instanceof EditText
如果它没有注册一个setOnTouchListener
一切都会到位。如果您想知道如何做到这一点,它实际上非常简单。这就是你要做的,你写一个像下面这样的递归方法,实际上你可以用它来做任何事情,比如设置自定义字体等……这是方法就是这样,只需在
setContentView
在您的活动中调用此方法即可。如果您想知道要传递什么参数,它是父容器的id
。将id
分配给您的父容器,例如<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
并调用
setupUI(findViewById(R.id.parent))
,仅此而已。如果您想有效地使用它,您可以创建一个扩展的---
setupUI()
Activity
并将此方法放入,并使您应用程序中的所有其他活动都扩展此活动并在onCreate()
方法。希望能帮助到你。
如果您使用超过 1 个活动,请为父布局定义公共 id,例如
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Then extend a class from
Activity
and definesetupUI(findViewById(R.id.main_parent))
Within itsOnResume()
and extend this class instead of ``Activityin your program
这是上述函数的 Kotlin 版本: