关于EditText的焦点和软键盘开关的一些总结

原创 2015年12月04日 11:42:47

一. 相关API

android:windowSoftInputMode属性一共有9个取值,分别是:

    stateUnspecified,stateUnchanged,stateHidden,stateAlwaysHidden,stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize,adjustPan。

android:fitsSystemWindows="true" 

(1).stateUnspecified(未指定状态)

 中文意思是未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式(stateUnspecified),系统会根据界面采取相应的软键盘的显示模式,比如,当界面上只有文本和按钮的时候,软键盘就不会自动弹出,因为没有输入的必要。那么,当界面上出现了获取了焦点的输入框的时候,软键盘会不会自动的弹出呢?这个还真不一定!比如,在下面的这个界面布局中,软键盘并不会自动弹出(因为虽然获取了焦点但是不确定是要否要输入)


代码1(不会自动弹出软键盘,除非点击了EditText)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toOther"
            android:text="跳转" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入内容" />
    </LinearLayout>

</LinearLayout>

代码2(自动弹出软键盘)

<LinearLayout 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"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:onClick="toOther"
                android:focusable="true"
                android:text="跳转" />

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入内容"/>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

就是说,默认的,在这种界面情况下,系统并不确定用户是否需要软键盘,因此不会自动弹出。但是,为什么说不一定呢?这是因为,如果我们在这个布局的外面,包裹上一个

ScrollView,软键盘就会自动的弹出来了!这是如果要避免这种情况就是在布局中其他控件获得焦点,或者EditText失去焦点(设置focusable,或者Activity中设置

android:windowSoftInputMode="stateHidden"

2.stateUnchanged(当前页面的软键盘跟上一个页面的软键盘保持一样的状态)

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

3.stateHidden

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


4.stateAlwaysHidden

不确定跟上面的有什么区别,暂时效果一样


 5.stateVisible

    设置为这个属性,可以将软键盘召唤出来,即使在界面上没有输入框的情况下也可以强制召唤出来(什么都不用点,一切到设置这个属性的页面,软键盘就弹出来了

 6.stateAlwaysVisible

不确定跟上面的有什么区别,暂时效果一样

7.adjustUnspecified(设置软键盘与软件的显示内容之间的显示关系)

当我们没有设置这个值的时候,这个选项也是默认的设置模式。

(1)如果界面里面有可以滚动的控件,比如ScrowView,系统会减小可以滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到所有的内容。

(2)如果布局里面没有滚动的控件,那么软键盘可能就会盖住一些内容,我们从下面的图中可以看出差别。

   没有滚动控件,软键盘下面的布局都被遮挡住了,若想修改,只能隐藏软键盘,然后选择。而且,重点注意一下上面的布局,当我们选择的输入框偏下的时候,上面的标题栏和布局被软键盘顶上去了。记住这个特征,因为后面有个属性和这个的效果不一样。

(其实设置这个adjustUnspecified貌似没什么软用,而且又没有scrollView该被遮挡还是会被遮挡,并没有什么变化)

8.adjustResize

如果不设置默认选择edittext的时候如果被遮挡了,就会网上顶  ,如果设置了,不会往上顶(原来布局是什么样,就是什么样),但是如果套了个scrollView就跟没设置的效果一样

9.adjustPan

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

但是对于有滚动控件的布局来说,则不太一样,我们看下面的效果图。

如果有滚动的控件包裹,设置了这个属性,就不能滑动页面(相当于什么都不设置的没有滚动控件的布局)




新打开acitivyt时,EditText焦点自动带出软键盘问题解决方法总结 ... ...

原因分析:        Android新启动Activity,dialog或者其他窗体中中包含EditText, 新启动的activity的焦点默认在EditText上,这时候android系统会自...

EditText焦点自动带出软键盘问题解决方法总结

原因分析:        Android新启动Activity,dialog或者其他窗体中中包含EditText, 新启动的activity的焦点默认在EditText上,这时候android系统会...
  • yzwty
  • yzwty
  • 2016年04月20日 23:27
  • 1737

软键盘 ListView中包含EditText 重绘 ,失去焦点

好记性不如烂笔头 今天遇到一个问题,activity布局如下(相对布局中一个lv 一个btn) lv中有edittext存在,当点击它让软件盘出现时 遇到两个问题 1 整体布局向上挤 2 被点击...

EditText失去焦点,收起软键盘

目标:点击EditText之外的区域,收起键盘,并且让EditText失去焦点。 使用到的技术: view.getLocationInWindow , event.getX()和event.getRa...

Android:ListView中包含EditText 文字冲突 复用 焦点 软键盘问题

核心代码:getView中: //为了避免输入框监听的冲突,解绑监听 if(viewHolder.editText.getTag() instanceof TextWatch...
  • fenlyer
  • fenlyer
  • 2017年06月27日 10:33
  • 242

activity 第一个获取焦点的组件是 EditText 时,开启这个activity 时就会自动弹出软键盘问题

在Manifest.xml中设定activity的属性[html] view plaincopy在CODE上查看代码片派生到我的代码片android:windowSoftInputMode="stat...

EditText焦点问题:进入app之后,就弹出软键盘

现象进入app之后,首界面的EditText就获取焦点。把软键盘弹了出来解决方案第一种:父控件添加属性      在EditText的外层布局,添加如下代码。给EditText添加没有效果androi...

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

公司项目中对其中一个画面的需求: 整个画面有若干行信息表示,画面要可以上下滚动,信息的行数不确定,每一行的内容也不定,但是每一行有大概的框架。   两种解决办法: 第1种:ScrollView...

取消edittext获取焦点,禁止弹出软键盘

Android中使EditText失去焦点,edittext禁止弹出键盘 在我们的应用中,有时候一进入一个页面, EditText默认就会自动获取焦点。弹出输入法框,用户体验很不好, 那么如何取消...

android AlertDialog中的Edittext自动获取焦点并弹出软键盘

转自 http://www.cuiweiyou.com/671.html private void confirmPhoneGurdPswd(final String guardPswd) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于EditText的焦点和软键盘开关的一些总结
举报原因:
原因补充:

(最多只允许输入30个字)