Android软键盘类型随心定制切换

项目中很多地方都需要用到输入框EditText,输入的内容可能有文字、数字、字母、金额、特殊字符等等,而且有的时候只能输入一种内容,比如数字,有的时候可以输入多种内容的组合,有的时候需要先显示数字键盘等等这些需求,小编这里总结一些这些需求的实现方式。

一、只能输入数字0~9

只需要配置digits与inputType两个属性即可实现只能输入数字的需求,详见如下代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/left_width"
android:digits="0123456789"
android:gravity="center_vertical"
android:hint="请输入纯数字"
android:inputType="phone"
android:maxLength="20"
android:singleLine="true"
android:textColorHint="@color/edit_hint"
android:textCursorDrawable="@null"
android:textSize="15sp" />

二、只能输入合法金额(金额带小数点)

金额的输入只需要配置inputType属性为numberDecimal即可,则自动只能允许输入数字或一个小数点。

1
2
3
4
5
6
7
8
9
<EditText
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center_vertical"
android:hint="请输入合法金额“
android:inputType="numberDecimal"
android:maxLength="10"
android:textColor="@color/black”
android:textSize="45sp" />

另外,在读取输入的金额的时候,可能要加入的校验是,如果小数点位于第一位的时候,需要自动补齐首位为0。

1
2
3
4
5
6
String cashValueStr = s.toString().trim();
cashValueStr = Utils.deleteSpace(cashValueStr);
// 如果输入的第一位是小数点,解决Bug
if (cashValueStr.indexOf(".") == 0) {
cashValueStr = "0" + cashValueStr;
}

三、输入数字及大小写字母,或者另加一些特殊符号(下划线等)

对于这个需求的话,EditText默认的inputType即可,不需要去配置,因为如果配了phone的话就只能输入数字,不能输入字母,配别的暂时没想到,故在此不进行配置,改用动态代码设置的形式,如下:

1
editText.setKeyListener(DigitsKeyListener.getInstance(getResources().getString(R.string.digists)));

其中,digists字符串如下:

1
<string name="digists">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-</string>

补充:这样一来,editText的输入内容就能兼容数字、大小写字母、短横等,特殊符号还可以自行补充,并且,键盘会先弹出数字键盘。

四、可输入任何内容(数字、字母、汉字),但是先显示数字键盘

默认的键盘是可以输入任何内容,但是这里的需求是可以输入任何内容,但是要首先弹出数字键盘,当然还是不能够设置inputType为phone咯,还是得动态设置,具体如下:

1
editText.setRawInputType(InputType.TYPE_CLASS_PHONE);

五、如何设置进入Activity立即弹出输入法

主要是设置windowSoftInputMode为adjustResize即可,如下:

1
2
3
4
5
<activity
android:name=".ui.activity.manage.SubmitAdviceActivity"
android:configChanges="orientation|keyboard|keyboardHidden"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />