android Dialog自动弹出软键盘的实现

想必大家都知道.,我们在使用Dialog的时候需要:

AlertDialog.Builder builder = new AlertDialog.Builder(context,android.R.style.Theme_Material_Dialog_Alert);

其中R.style.Theme_Material_Dialog_Alert就是为其设置一个style,在我们需要Dialog中自动弹出软键盘的时候,我们就需要改变一下这个style(在res/values/styles)下

在此设置一个style

这是我设置的style的代码,其中:

    <item name="android:windowSoftInputMode">stateVisible</item>

就是设置软键盘是否弹出的,这个属性一个有七个属性值,他们是:

1.stateUnspecified
中文意思是未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这样的交互方式,系统会依据界面采取对应的软键盘的显示模式。比方。当界面上仅仅有文本和button的时候,软键盘就不会自己主动弹出。由于没有输入的必要。对于此属性值, 这确实是一个非常奇怪的推断方式。我们能够得出结论,当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的。可是当有获得焦点的输入框的界面有滚动的需求的时候,会自己主动弹出软键盘。至于为什么非要强调要获取焦点的输入框。这是由于,假设不是输入框获取焦点。软键盘也是不会自己主动弹出的。让界面不自己主动弹出软键盘的当中一个解决方式,就是在xml文件里。设置一个非输入框控件获取焦点,从而阻止键盘弹出。

2.stateUnchanged
中文的意思就是状态不改变的意思。我们应该怎么理解这句话呢?事实上非常好理解,就是说,当前界面的软键盘状态,取决于上一个界面的软键盘状态。举个样例,假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;假设当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。

3.stateHidden

顾名思义,假设我们设置了这个属性,那么键盘状态一定是隐藏的,无论上个界面什么状态。也无论当前界面有没有输入的需求,反正就是不显示。因此,我们能够设置这个属性,来控制软键盘不自己主动的弹出。

4.stateAlwaysHidden
这个属性也能够让软键盘隐藏,可是我临时还不知道和stateHidden属性的差别。(等弄清楚了会来补充,感谢大家的理解)

5.stateVisible

设置为这个属性,能够将软键盘召唤出来,即使在界面上没有输入框的情况下也能够强制召唤出来。

6.stateAlwaysVisible

这个属性也是能够将键盘召唤出来,可是与stateVisible属性有小小的不同之处。举个样例,当我们设置为stateVisible属性,假设当前的界面键盘是显示的,当我们点击button跳转到下个界面的时候,软键盘会由于输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。可是假设我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,可是当我们再次回来的时候。软键盘是会显示出来的。

所以。这个Always就解释了这个差别,无论什么情况到达当前界面(正常跳转或者是上一个界面被用户返回)。软键盘都是显示状态。

7.adjustUnspecified

从这个属性开始。就不是设置软键盘的显示与隐藏模式了,而是设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会依据界面选择不同的模式。假设界面里面有能够滚动的控件,比方ScrowView。系统会减小能够滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到全部的内容。假设布局里面没有滚动的控件。那么软键盘可能就会盖住一些内容,我们从以下的图中能够看出区别。

猜你喜欢

转载自blog.csdn.net/zhourui_1021/article/details/80227287