以下代码段只是隐藏了键盘:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
您可以将其放在实用程序类中,或者如果要在活动中定义它,请避免使用activity参数或调用 hideSoftKeyboard(this)
。
最棘手的部分是何时调用它。您可以编写一个遍历View
活动中每个步骤的方法,并检查该方法instanceof EditText
是否setOnTouchListener
为该组件未注册的方法,并且一切都准备就绪。如果您想知道如何做到这一点,那实际上很简单。这是您的工作,您编写了如下的递归方法,实际上您可以使用此方法执行任何操作,例如设置自定义字体等。
public void setupUI(View view) {
// Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(MyActivity.this);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
就是这样,只需setContentView
在您进行活动后调用此方法即可。如果您想知道要传递什么参数,它是id
父容器的参数。将分配id
给您的父容器,例如
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
并打电话 setupUI(findViewById(R.id.parent))
,仅此而已。
如果您想有效地使用它,则可以创建一个扩展Activity
并将其放入其中,并使应用程序中的所有其他活动扩展该活动并setupUI()
在onCreate()
方法中。
希望能帮助到你。
如果您使用多个活动,请为父级布局定义通用ID,例如
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
然后从中扩展一个类Activity
并setupUI(findViewById(R.id.main_parent))
在其中定义OnResume()
并扩展该类,而不是``活动in your program
这是上述功能的Kotlin版本:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}