处理输入法可见性

最后更新于:2022-04-01 01:45:50

> 编写:[zhaochunqi](https://github.com/zhaochunqi) - 原文:[http://developer.android.com/training/keyboard-input/visibility.html](http://developer.android.com/training/keyboard-input/visibility.html) 当输入焦点移入或移出可编辑当文本域时,Android会相应的显示或隐藏输入法(如屏幕输入法)。系统也会决定你的输入法上方UI和文本域的显示。举例来说,当屏幕上竖直空间被压缩时,文本域可能填充所有的输入法上方的空间。对于多数的应用来说,这些默认的行为基本就足够了。 然而,在一些事例中,你可能会想要更加直接的控制输入法的显示,指定你的布局在在输入法显示时候的表现。这节课会向你解释如何控制和回应输入法的可见性。 ### 在[Activity](# "An activity represents a single screen with a user interface.")启动时显示输入法 尽管Android会在[Activity](# "An activity represents a single screen with a user interface.")启动时给予第一个文本域焦点,但是并不会显示输入法。因为进入文本可能并不是[activity](# "An activity represents a single screen with a user interface.")中的首要任务,所以这为是很合理的。可是,如果进入文本确实需要是首要的任务(如登录界面),可能需要用到输入法默认显示。 为了在[activity](# "An activity represents a single screen with a user interface.")启动时展示输入法,添加[android:windowSoftInputMode](http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft) 属性到<[activity](# "An activity represents a single screen with a user interface.")>元素中,使用 "stateVisible",如下: ~~~ <application ... > <activity android:windowSoftInputMode="stateVisible" ... > ... </activity> ... </application> ~~~ > **注意:**如果用户设备有一个实体键盘,软键盘输入法可能不显示。 ### 需要时显示输入法 如果在[activity](# "An activity represents a single screen with a user interface.")生命周期中有一个方法在想要确保输入法是可见的,可以使用 [InputMethodManager](http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html) 来实现。 举例来说,下面的方法调用了一个需要用户填写文本的[View](http://developer.android.com/reference/android/view/View.html),调用了[requestFocus()](http://developer.android.com/reference/android/view/View.html#requestFocus()) 来获取焦点,然后 [showSoftInput()](http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#showSoftInput(android.view.View, int))来打开输入法。 ~~~ public void showSoftKeyboard(View view) { if (view.requestFocus()) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); } } ~~~ > **注意:**一旦输入法设定可见了,你不应该用程序来隐藏。系统会在用户结束文本域的任务的时候隐藏,或者可以使用系统控制(如返回键)来隐藏。 ### 指定你的UI回应方式 当你的输入法显示在屏幕上,减少了UI中的可用空间。系统会为你的UI的可见区的UI做调整但是可能并非很正确。为了确保你应用的最佳表现,你应该在UI的剩余空间中展示你想要展示的系统界面。 为了声明你在[activity](# "An activity represents a single screen with a user interface.")中的合适的对待,使用 android:windowSoftInputMode 属性在你的清单文件中的<[activity](# "An activity represents a single screen with a user interface.")>元素使用某个"adjust"值。 举例来说,为了确保系统会在可用空间中重新调整布局的大小。为了确保你所有的布局内容都是可用的(尽管可能需要滑动)使用"adjustResize": ~~~ <application ... > <activity android:windowSoftInputMode="adjustResize" ... > ... </activity> ... </application> ~~~ 你可以结合调整和使用上面的[初始输入法可见性](#)来指定: ~~~ <activity android:windowSoftInputMode="stateVisible|adjustResize" ... > ... </activity> ~~~ 如果你的UI中包含用户可能需要在文本输入时立即执行的事情,那么使用"adjustResize"时很重要的。例如,如果你使用相对布局在屏幕底部放置一个按钮,使用"adjustResize"来重新调整大小,使得按钮栏出现在输入法上方。
';