Android 输入法windowSoftInputMode详解

来源:互联网 发布:广州简知科技 编辑:程序博客网 时间:2024/05/18 00:16

在Android开发中,当输入法的显示和隐藏状态改变的时候界面布局的显示方式需要特定的设置。
那么是如何控制的呢?

在声明Activity的时候可以设置一个属性来达到设置软键盘的显示和隐藏,并且可以控制布局根据不同的模式显示:

这个属性是:andorid:windowSoftInputMode 此属性有9个取值,并且分为2个部分:state | adjust 前者
设置软键盘的状态,有显示和隐藏2中状态,后者设置软键盘与软件的显示内容之间的显示关系。

下面是9个属性的一一说明:

  • stateUnspecified : 中文意思是不指定状态,这是一个很微妙的判定方式,是系统默认的方式。系统会根据界面来显示或隐藏软键盘。
    • 当界面中没有获取焦点的输入框的时候,软键盘不会自动弹出
    • 只有在界面中有输入框并且在可滑动的视图中,才会弹出软件盘.
  • stateUnchanged : 中文意思为状态不改变,怎么理解呢? 就是说当跳转了2个界面的时候,第一个界面软键盘是什么状态,第二个界面软键盘就是什么状态。就是状态保存起来不变。
  • stateHidden : 设置了这个属性的时候,软键盘是不会显示的
  • stateAlwaysHidden:意思是如论如何都是隐藏的,就是说无论怎么跳转到当前界面软键盘都是隐藏的。
  • stateVisible : 软键盘显示
  • stateAlwaysVisible : 同上面的stateAlawaysHidden 意思一样,无论如何都是显示的
    上面6个属性指的是state的属性,我们设置windowSoftInoutMode的时候可以设置为 : state | adjust 的形式,同时指定软键盘的状态和,软键盘和界面之间的显示关系。

下面3个属性就是设置软键盘和界面之间的显示关系:

  • adjustUnspecified : 这个属性是系统默认的属性,表示,如果界面没有可滑动的View的时候,软键盘出来的时候会覆盖掉底部的内容,如果选择的是靠近底部的输入框,上面的布局会被顶上去。如果界面中有可滑动的View的时候,软键盘弹出的时候,界面会把滑动的View的高度缩小,使得整个界面能够显示出来。

  • adjustResize : 这个属性表示,Activity所在的窗口会被缩小,从而保证有空间显示软键盘,当界面没有ScrollView的时候,窗口不会被顶上去。如果界面中有ScrollView的时候,效果和adjustUnspecified一样。

  • adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的失业范围里面,从而让用户可以看到自己输入的内容。对于没有滚动控件的布局来说,这个其实就是默认的设置,如果我们选择的位置偏下,上面的标题栏和部分控件会被顶上去。但是对于有滚动控件的布局来说,则不太一样。

其实有这么多属性,可能用到的情况不多,根据不同的需求选取就行了。

下面举一个例子:有时候有这样的一种需求,要求底部栏一直显示,当弹出软键盘的时候,底部栏会被顶起:

我们实现一个布局文件,里面包含了一个可滑动的View,然后在底部显示一个按钮:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ScrollView        android:layout_width="match_parent"        android:layout_height="match_parent" >        <EditText            android:id="@+id/editText1"            android:layout_width="100dp"            android:layout_height="match_parent"            android:layout_alignLeft="@+id/textView1"            android:layout_below="@+id/textView1"            android:layout_marginLeft="18dp"            android:layout_marginTop="84dp" >            <requestFocus />        </EditText>    </ScrollView>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:text="哈哈" /></RelativeLayout>

windowSoftInputMode 设置为adjustResize

这时候,按钮就可以一直显示在软键盘上方.

0 0
原创粉丝点击