1.我们在项目中经常会遇到软键盘遮挡页面,输入框或者软键盘自动弹出的场景,在Android中Activity给我们提供了一个属性”windowSoftInputMode“,专治输入法对布局造成一系列的影响,我们只需要在AndroidManifest.xml文件中的activity中设置android:windowSoftInputMode属性可以很好解决上面所说的问题。

2.windowSoftInputMode属性的取值:
该属性一共有9种取值,分别为:
* stateUnspecified
* stateUnchanged
* stateHidden
* stateAlwaysHidden
* stateVisible
* stateAlwaysVisible
* adjustUnspecified
* adjustResize
* adjustPan。
下面通过例子来演示每个属性值的作用

第一部分:设置软键盘的显示与隐藏

1.stateUnspecified

中文意思是未指定状态,Activity默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式,当界面上只有文本和按钮的时候,软键盘就不会自动弹出,因为没有输入的必要;当界面上出现了获取了焦点的输入框的时候,又分为两种情况:
* 1.第一种:有可输入的控件,但是页面不能滚动(不能自动弹出,需要点击输入框)

  • 2.第二种:有可输入的控件并且页面可以滚动(能够自动弹出)在上面的基础上在布局中加上一个ScrollView,是页面能够滚动

因此,我们可以得出结论,当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的,但是当有获得焦点的输入框的界面有滚动的需求的时候,会自动弹出软键盘。至于为什么非要强调要获取焦点的输入框,这是因为,如果不是输入框获取焦点,软键盘也是不会自动弹出的,让界面不自动弹出软键盘的其中一个解决方案,就是在xml文件中,设置一个非输入框控件获取焦点,从而阻止键盘弹出。

2.stateUnchanged

中文的意思就是状态不改变的意思,作用就是当前界面的软键盘状态,取决于上一个界面的软键盘状态。也就是说假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;如果当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。

                                                        

设置为该属性,软键盘的状态会跟着上一个页面走,即使当前的页面没有可输入的控件。

3.stateHidden

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

  

##4.stateAlwaysHidden
这个属性也可以让软键盘隐藏,目前测试跟stateHidden的效果一样,还没有测试出两者的区别。

##5.stateVisible
设置为这个属性,可以强制将软键盘出来,即使在界面上没有输入框的情况下。

<?xml version="1.0" encoding="utf-8"?>

6.stateAlwaysVisible

这个属性也是可以将键盘强制显示出来,与stateVisible属性不同之处在于:当我们设置为stateVisible属性,如当我们点击按钮跳转到下个界面的时候,软键盘会因为输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。但是如果我们设置为stateAlwaysVisible,我们跳转到下个界面,再次回来的时候,软键盘是会显示出来的。

                                                 

第二部分:设置软键盘与显示内容间的关系

##1.adjustUnspecified
该属性是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。如果界面里面有可以滚动的控件,比如ScrowView,系统会减小可以滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到所有的内容。如果布局里面没有滚动的控件,那么软键盘可能就会盖住一些内容

如果没有滚动控件,当可输入的控件在上面时,软件盘会遮挡内容;当可输入的控件在下面时,内容被顶上去了,同时标题栏也被顶上去了

如果有滚动控件,当可输入的控件在上面时,系统会减小可以滚动的界面的大小,从而保证即使软键盘显示出来了同时内容可以滚动显示出来;当可输入的控件在下面时,内容被顶上去了,但是标题栏没有被顶上去。

##2.adjustResize
这个属性表示Activity的主窗口总是会被调整大小,从而保证软键盘显示空间。它跟adjustUnspecified的区别就在于当页面可滚动并且可输入控件在下面的时候,内容被顶上去了,但是标题栏没有被顶上去。

3.adjustPan

Activity的屏幕大小并不会调整来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视线范围内,从而让用户可以看到自己输入的内容。对于没有滚动控件的布局来说,这个其实就是默认的设置,如果我们选择的位置偏下,上面的标题栏和部分控件会被顶上去。但是对于有滚动控件的布局来说,则不太一样,我们看下面的效果图。

只要可输入控件在上面,不管能否滚动,软件盘都会遮挡部分内容的

只要可输入控件在下面,不管能否滚动,内容和标题栏都会被顶上去的。

第三部分:关于使用

上面第一部分介绍了软件盘的显示与隐藏,第二部分介绍了软件盘与内容之间的显示关系,一般我们在使用的时候都是结合二者使用的。

android:windowSoftInputMode="【A】|【B】"//A:为显示属性 B:为关系属性

更多相关文章

  1. android 聊天用RecyclerView获取键盘高度和消息自动显示在最底部
  2. Android 控件布局实现卡片效果,阴影效果
  3. Android 键盘布局总结
  4. 使用eclipse与android studio 在开发自定义控件时的区别
  5. Android开发EditText不自动弹出键盘
  6. 介绍一个Android的开源的自定义小控件:TextDrawable
  7. 关于EditText 焦点 及 软键盘弹出引起不适 的几点
  8. Android常见的十个高级控件
  9. Android各种花式酷炫自定义控件开源库集合

随机推荐

  1. 利用ActivityInstrumentationTestCase2测
  2. 【android studio】 the logging tag can
  3. JNI / C for android 技术总揽
  4. Android中检测手机制式和移动网络类型
  5. Android中的数据存储与传输
  6. 在 Android 中使用 SQLite, ContentProvi
  7. [Android] Activity页面切换效果
  8. 如何提高Android用户体验
  9. android一些细节问题
  10. [置顶] android studio导入项目后出现can