主要有以下三点:
- 修改输入法类型 ;
- 输入法可见性;
- 支持键盘导航 ;
1.修改输入法的类型:
- 有时在设置输入框的时候需要规定输入的数据类型,如Email地址,电话号码,或者纯文本,这样做可以让系统展示更为合适的软输入法(比如虚拟键盘),在这种情况下就可以去在XML文件中修改属性设置
android:inputType=""
,可以选择自己需要的数据类型,如输入密码:android:inputType="textpassword"
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:inputType="textpassword" />
- inputType允许我们为输入法制定不同的行为,有几种可供选择的值在android:inputType的属性中,可以进行值的组合来实现特定的输入法外观和附加的行为。如果文本框是用于基本的文本输入那么我们可以使用“textAutoCorrect”属性设置,来开启自动拼写修正。
<EditText
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType=
"textCapSentences|textAutoCorrect"
... />
- 很多的键盘底部会给用户提供适合的动作按钮来触发当前文本的操作,默认的情况下使用的是next,如果我们要指定适合的文本框额外动作,比如: send ,search。我们可以这样设置属性:
android:imeOptions="actionSend"
通过“imeOptions”设置相关属性 actionSend” 或 “actionSearch”,(如果文本输入框允许多行文本,如:android : inputType= “textMultiLine”,在这种情况下动作按钮是回车换行) - 对指定的额外动作的监听操作:
我们可以通过EditText节点定义EditText.OnEditorActionListener来监听动作按钮的按压。在监听器中响应EditorInfo类中定义的适合的IMEactionID,比如IME_ACTION_SEND 代码如下:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage();
handled = true;
}
return handled;
}
})
2.修改输入法的类型:
- 在Activity启动是显示输入法;
在Activity启动是焦点会放在第一个Edittext文本输入框,但有的时候需要在启动的时候就显示键盘输入,比如在登录界面的时候,默认显示输入法:为了在activity启动时显示输入法,添加 android:windowSoftInputMode 属性到 节点中,并将该属性的值设为 “stateVisible”。如下:
<application ... >
<activity
android:windowSoftInputMode="stateVisible" ... >
...
</activity>
...
</application>
- 在需要的时候显示输入法;
如果我们要在Activity的某个方法中显示输入法的时候,需要通过 InputMethodManager 来实现。
举例来说,下面的方法调用了一个需要用户填写文本的View,调用了 requestFocus() 来获取焦点,然后调用 showSoftInput() 来打开输入法。
public void showSoftKeyboard(View view) {
if (view.requestFocus()) {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
}
- 指定UI的响应方式
当输入法显示在屏幕上时,会减少 app UI 中的可用空间。系统会决定如何调整 UI 可见的部分,但是这样做不一定正确。为了确保应用的最佳表现,我们应该在 UI 的剩余空间中展示我们想要展示的系统界面。
我们可以在activity中声明合适的处理方法,可以在 manifest 文件的 节点中使用 android:windowSoftInputMode 属性,并将该属性的值设为”adjustResize”。
举例来说,为了确保系统会在可用空间中重新调整布局的大小——确保所有的布局内容都可以被使用(可能需要滑动)——使用 “adjustResize”:
<application ... >
<activity
android:windowSoftInputMode="adjustResize" ... >
...
</activity>
...
</application>
//我们可以结合上述调整说明和初始化输入法可见性说明:
<activity
android:windowSoftInputMode="stateVisible|adjustResize" ... >
...
</activity>
如果 UI 中包含用户可能需要在文本输入时立即执行的事情,那么使用 “adjustResize” 是很重要的。例如,如果我们使用相对布局(relative layout)在屏幕底部放置一个按钮,用 “adjustResize” 来重新调整大小,使得按钮栏出现在输入法上方。
#####3.支持键盘导航(Tab键) :
当用户使用键盘上的Tab键导航我们的应用时,系统会根据组件在布局中的显示顺序,在组件之间传递焦点。如果我们使用相对布局(relativelayout),例如,在屏幕上的组件顺序与布局文件中组件的顺序不一致,那么我们可能需要手动指定焦点顺序。
举例来说,在下面的布局文件中,两个对齐右边的按钮和一个对齐第二个按钮左边的文本框。为了把焦点从第一个按钮传递到文本框,然后再传递到第二个按钮,布局文件需要使用属性
android:nextFocusForward,清楚地为每一个可被选中的组件定义焦点顺序:
<RelativeLayout ...>
<Button
android:id="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:nextFocusForward="@+id/editText1"
... />
<Button
android:id="@+id/button2"
android:layout_below="@id/button1"
android:nextFocusForward="@+id/button1"
... />
<EditText
android:id="@id/editText1"
android:layout_alignBottom="@+id/button2"
android:layout_toLeftOf="@id/button2"
android:nextFocusForward="@+id/button2"
... />
... </RelativeLayout>
现在焦点从 button1 到 button2 再到 editText1,改成了按照在屏幕上出现的顺序:从 button1 到
editText1 再到 button2。
- 用户也能够使用键盘上的方向键在我们的app中导航(这种行为与在D-pad和轨迹球中的导航一致)。系统提供了一个最佳猜测:根据屏幕上 view 的布局,在给定的方向上,应该将交掉放在哪个 view 上。然而有时,系统会猜测错误。
当在给定的方向进行导航时,如果系统没有传递焦点给合适的 View,那么指定接收焦点的 view 来使用如下的属性:
android:nextFocusUp
android:nextFocusDown
android:nextFocusLeft
android:nextFocusRight
当用户导航到那个方向时,每一个属性指定了下一个接收焦点的 view,如根据 view ID 来指定。举例来说:
<Button
android:id="@+id/button1"
android:nextFocusRight="@+id/button2"
android:nextFocusDown="@+id/editText1"
... />
<Button
android:id="@id/button2"
android:nextFocusLeft="@id/button1"
android:nextFocusDown="@id/editText1"
... />
<EditText
android:id="@id/editText1"
android:nextFocusUp="@id/button1"
... />
希望对大家有所帮助!!!