Android软键盘的弹出与隐藏与windowSoftInputMode详解

前言

我们在写控件的时候,特别是输入数据的控件,用户一点进来就弹出了键盘,用户直接敲键盘输入,用户体验非常好。

一、Activity通过windowSoftInputMode控制键盘

通过android:windowSoftInputMode=""这个可以控制键盘的弹出情况。
也有很多种设置,看图。
在这里插入图片描述
共有十种可以选,而且可以通过|这个来选择多种。
分别来说明一下:

属性 说明
adjustNothing 这种模式 Activity窗口不会做任何调整,contentView 大小也不会改变。
adjustPan activity的主窗口并不会调整大小来为软键盘预留空间,相反,当前窗口的内容将会自动移动以便当前焦点从不被软键盘遮盖,用户能总是看到输入内容的部分。adjustPan相比于adjustResize通常用的少点,因为用户可能必须关闭软键盘才能和窗口中被遮挡的部分交互。
adjustResize activity的主窗口总是调整大小来为软键盘预留空间
adjustUnspecified 这个设置没有指明是否减小activity主窗口的大小来为软键盘预留空间,或者是否当activity主窗口的部分内容被软键盘遮盖时它的内容焦点是可见的。系统会选择其中的一种模式:根据窗口内容里是否有可以滑动内容的布局view,如果有这样的一个view,activity的窗口将会调整大小,假设滚动可以显示所有窗口的内容在一个更小的区域。
stateAlwaysHidden 软键盘总是隐藏的(即使activity有输入焦点)
stateAlwaysVisible 通常适当情况下软键盘是可见的(当用户导航到该activity的主窗口时)
stateHidden 当用户选择到该activity时,软键盘是隐藏的-也就是说,当用户确实导航到该activity时,而不是因为离开另一个activity退回到该activity的时候。
stateUnchanged 当activity来到栈顶时,软键盘可见或隐藏和前一个activity软键盘的状态保持一致并且不变。
stateUnspecified 当用户选择到该activity的时候软键盘是可见的-也就是说,用户确实是导航到该activity的时候,而不是因为离开另一个activity才返回到该activity的时候。
stateVisible 通常适当情况下软键盘是可见的(当用户导航到该activity的主窗口时)

以上就是全部效果的解释,可能略有偏差,可多查阅其它资料。最后要自己动手试试效果如何。

二、代码控制软键盘的弹出

当你的Activity中有一个AlterDialogd的时候,而你AlterDialogd中也有输入框,这时候点一下输入框获得焦点才可以弹出键盘,要实现一打开这个AlterDialogd就弹出键盘,就需要设置代码让键盘出来。
请看以下代码,就是控制键盘的弹出与隐藏,当然还有其他种写法,自己去研究一下。

//弹出键盘
private void showSoftInput() {
   InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
   if (inputMethodManager != null) {
      inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
   }
}
//隐藏键盘
private void hideSoftInput(View view) {
   InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
   inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

三、影响键盘的另一个属性

android:configChanges

这个属性,也是Activity属性,感兴趣可以自己查阅资料。

发布了21 篇原创文章 · 获赞 1 · 访问量 885

猜你喜欢

转载自blog.csdn.net/qq_33401954/article/details/102573274