Android中 windowSoftInputMode属性详解

Android windowSoftInputMode属性主要是解决软键盘冲突的,本文讲解一下它的属性
首先是它在Xml文件的使用:

   <activity
       android:name=".MainActivity"
       android:label="@string/app_name" 
       android:windowSoftInputMode="adjustPan">
   </activity>

然后在java中使用:

public class MainActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    }
}

1、stateUnspecified

未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式:

1)如果界面上只有文本和按钮的时候,软键盘就不会自动弹出;

2)如果界面上出现了获取了焦点的输入框时,

a、如果界面没有滚动需求,软键盘不会自动弹出;

b、如果界面有滚动需求(如界面中有RecyclerView、ScrollView等可以滑动的控件)时,软键盘会自动弹出。

2、stateUnchanged

状态不改变,当前界面的软键盘状态,取决于上一个界面的软键盘状态,如果从上一个界面跳转到当前界面的时候,软键盘是显示的,那么到了这个界面软键盘也是显示的;如果从上一个界面跳转到当前界面的时候,软键盘是隐藏的,那么到了这个界面软键盘也是隐藏的。

3、stateHidden

状态隐藏,如果我们设置了这个属性,键盘状态就一定是隐藏的,不管上个界面是什么状态,也不管当前界面有没有输入的需求,就是不显示软键盘。

4、stateAlwaysHidden

状态隐藏,如果我们设置了这个属性,键盘状态就一定是隐藏的。和stateHidden效果几乎一样(暂未发现不同之处),比stateHidden隐藏范围更广。

5、stateVisible

状态显示,如果我们设置了这个属性,会把键盘召唤出来,即使在界面上没有输入框的情况下也会强制召唤出来。

6、stateAlwaysVisible

状态显示,这个属性也是将键盘召唤出来,与stateVisible属性小小的区别是:当我们设置了当前页面为stateVisible属性,如果当前的界面键盘是显示的,当我们点击按钮跳转到下个界面的时候,如果在新的页面软键盘隐藏起来,当我们再次回到当前页面的时候,键盘也是隐藏的;但是如果我们设置了当前页面为stateAlwaysVisible,跳转到下个页面,再回到当前页面的时候,软键盘也是会显示出来的。
估计stateHidden和stateAlwaysHidden的区别也类似。

7、adjustUnspecified

未指定状态,这个是软键盘与页面之间显示关系的未指定状态、默认设置状态。这种状态下,系统会根据界面选择不同的模式,如果界面里有可滚动的控件,系统会缩小可以滚动的界面的大小来保证即使软键盘弹出了,也能够看到所有的控件;如果界面里没有可滚动的控件,那么软键盘可能就会盖住一些控件(布局的位置会发生变化,会让获取了焦点的控件显示出来,视情况隐藏可能会隐藏一些控件)。
8、adjustResize
顾名思义,这种模式会自动调整大小。通过 hierarchy View 观察,decorView 大小本身并不会改变,但是我们的内容区 contentView (id = android.R.content) 会相应的缩小,为键盘的显示挪出空间。contentView 的下面为空白区域,软键盘就是覆盖在这个区域。

注意:adjustResize 只是调整 contentView 的大小,所以还是有可能覆盖掉 EditText。

adjustResize 最有用的是,这种模式可以轻松的获取到软键盘的高度,软键盘弹出后 contentView 高度变化的差值即为软键盘高度。

另外:这种模式可能会有个问题,当键盘消失时屏幕会出现一闪感觉有点难受。原因是键盘弹出时,键盘位置显示的是 windowBackground ,如果 windowBackground 为黑色而 Activity 背景为白色,当键盘消失时就会有闪动。解决办法是在 Activity 主题上添加一个 android:windowBackground 属性修改 windows 背景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值