文章目录

  • 前言
  • 一、Activity通过`windowSoftInputMode`控制键盘
  • 二、代码控制软键盘的弹出
  • 三、影响键盘的另一个属性


前言

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

一、Activity通过windowSoftInputMode控制键盘

通过android:windowSoftInputMode=""这个可以控制键盘的弹出情况。

也有很多种设置,看图。

Android 键盘弹出后又消失 安卓中如何弹出键盘_控件


共有十种可以选,而且可以通过|这个来选择多种。

分别来说明一下:

属性

说明

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属性,感兴趣可以自己查阅资料。