Android之EditText不自动获取焦点

  1. 在EditText的父布局中的布局文件中设置这两行代码
    android:focusable="true"
    android:focusableInTouchMode="true"

     

  2. 在代码中设置EditText焦点通过setFocusable()和setFocusableInTouchMode() 不过这个好像不怎么管用
  3. 如果你是不是想跳转到有EditText的界面时自动弹出软键盘的话 可以在功能清单文件(AndroidManifest.xml) 中的相对应activity节点中设置软键盘弹出模式
    
       android:windowSoftInputMode="adjustPan|stateHidden"

     

关于 windowSoftInputMode属性:stateUnspecified,stateUnchanged,stateHidden,stateAlwaysHidden,stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize,adjustPan。

当我们设置属性的时候可以设置一个或多个("state...|adjust")

  1. stateUnspecified
    中文的意思是未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的,但是当有获得焦点的输入框的界面有滚动的需求的时候,会自动弹出软键盘;让界面不自动弹出软键盘的其中一个解决方案,就是可以在xml文件中,设置一个非输入框控件获取焦点,从而阻止键盘弹出。

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

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

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

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

  2. stateUnchanged
    中文的意思是状态不改变的意思,当前界面的软键盘状态,取决于上一个界面的软键盘状态,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示。

  3. stateHidden
    顾名思义,如果我们设置了这个属性,那么键盘的状态一定是隐藏的,软键盘总是被隐藏。

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

  5. stateVisible
    状态显示,如果设置了该属性值,那么会把键盘召唤出来,即使在界面上没有输入框的情况下也会强制召唤出来。
  6. stateAlwaysVisible
    状态显示,这个属性也是可以将键盘召唤出来,与stateVisible属性小小的区别是:当我们设置为stateVisible属性,如果当前的界面键盘是显示的,当我们点击按钮跳转到下个界面的时候,如果在新的页面软键盘隐藏起来,当我们再次回到当前页面的时候,键盘也是隐藏的;但是如果我们设置了当前页面为stateAlwaysVisible,跳转到下个页面,再回到当前页面的时候,软键盘也是会显示出来的。
  7. adjustUnspecified
    默认设置,当没有设置这个值的时候,这个选项也是默认的设置模式。系统会根据界面选择不同的模式。如果界面里面有可以滚动的控件,比如ScrowView,系统会减小可以滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到所有的内容。如果布局里面没有滚动的控件,那么软键盘可能就会盖住一些内容(软键盘下面的布局都被遮挡住了,若想修改,只能隐藏软键盘,然后选择。而且,重点注意一下上面的布局,当我们选择的输入框偏下的时候,上面的标题栏和布局被软键盘顶上去了)。
  8. adjustResize 
    调整大小状态 这个属性表示Activity的主窗口总是会被调整大小,从而保证软键盘显示空间。设置为adjustResize属性之后,对于界面中有可滑动控件,显示效果跟adjustUnspecified显示效果一样;如果界面中没有可滑动控件,软键盘可能会盖住一些控件(布局的位置不会发生变化,可能获取了焦点的控件被软键盘盖住)。对于没有滑动控件的布局,虽然还是不能选择所有的输入框,但是,窗口的显示方式发生了变化,默认属性时,整个布局是被顶上去了,但是设置为adjustResize属性,布局的位置并没有发生什么变化,这就是最大的区别。
  9. adjustPan
    当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。如果设置了这个属性,当软键盘弹出的时候,系统会通过布局的移动,来保证用户要进行输入的输入框在用户的视线范围内。如果界面没有可滑动控件,显示效果和adjustUnspecified效果一样;如果界面有可滑动控件,在软键盘显示的时候,可能会有一些内容显示不出来。

    注:对于没有滚动控件的布局来说,采用的是adjustPan方式;对于有滚动控件的布局来说,采用的是adjustResize方式。

你可能感兴趣的:(Android之EditText不自动获取焦点)