Android开发中软键盘常见问题

本文转自:http://www.cnblogs.com/itrena/p/5938210.html

软键盘显示原理

软键盘本质是什么呢?软件盘其实是一个Dialog。
InputMethodService为我们的输入法创建一个Dialog,并且将该Dialog的Window的默写参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或全屏显示。

软键盘显示的调整

android定义了一个属性,名字为windowSoftInputMode,这个属性用于设置Activity主窗口与软键盘的交互模式,用于避免软键盘遮挡内容的问题。我们可以在AndroidManifest.xml中对Activity进行设置。如:android:windowSoftInputMode=”stateUnchanged|adjustPan”。

该属性可选的值有两部分,一部分为软键盘的状态控制,控制软键盘是隐藏还是显示,另一部分是Activity窗口的调整,一遍腾出控件展示软键盘。

  • stateUnspecified(未指定状态):当我们没有设置windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。
  • stateUnchanged(不可改变状态):当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。
  • stateHidden(隐藏状态):当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。
  • stateAlwaysHidden(总是隐藏状态):当设置该状态是,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。
  • stateVisible(可见状态):当设置为这个状态是,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来。
  • stateAlwaysVisible(总是显示状态):当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。
  • adjustUnspecified(未指定模式):设置软键盘与软件的显示内容之间的显示关系,当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这种情况下,系统会根据界面选择不同的模式。
  • adjustResize(调整模式):该模式下窗口总是调整屏幕的大小,用于保证软键盘的显示控件,这个选项不能和adjustPan同时使用。如果这两个属性都没有被设置,系统会根据窗口中的布局自动选择其中一个。
  • adjustPan(默认模式):该模式下不会调整来保证软键盘的控件,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视野范围内,从而让用户可以看到自己输入的内容。
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s