2.13 用KeyListener控制输入
Pratik Rupwal
2.13.1 问题
你的应用程序包含少数文本框,希望在这些文本框中限制用户仅能输入数字;而且,在某些情况下,你希望仅允许输入数字、整数或者日期。
2.13.2 解决方案
Android提供KeyListener类,帮助你限制用户仅能输入数字/整数/正整数等。
2.13.3 讨论
Android.text.method包含一个KeyListener接口,以及实现这一接口的DigitsKeyListener和DateKeyListener等类。
例2-17是一个样例应用,展示了这些类的使用。这个布局文件创建5个TextView和5个EditView;TextView显示对应EditText所允许的输入类型。
例2-17:TextView和EditText布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textview1"
android:text="digits listener with signs and decimal points"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editText1"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textview2"
android:text="digits listener without signs and decimal points"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editText2"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textview3"
android:text="date listener"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editText3"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textview4"
android:text="multitap listener"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editText4"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textview5"
android:text="qwerty listener"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editText5"
/>
</LinearLayout>
例2-18是限制EditText输入为数字、正整数等的活动的代码(允许的按键组参见注释)。
例2-18:主活动
import android.app.Activity;
import android.os.Bundle;
import android.text.method.DateKeyListener;
import android.text.method.DigitsKeyListener;
import android.text.method.MultiTapKeyListener;
import android.text.method.QwertyKeyListener;
import android.text.method.TextKeyListener;
import android.widget.EditText;
public class KeyListenerDemo extends Activity {
/** 在活动第一次创建时调用 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//允许输入带有正/负符号和小数点的数字
EditText editText1=(EditText)findViewById(R.id.editText1);
DigitsKeyListenerdigkl1=DigitsKeyListener.getInstance(true,true);
editText1.setKeyListener(digkl1);
//只允许正整数(不允许小数)
EditText editText2=(EditText)findViewById(R.id.editText2);
DigitsKeyListener digkl2=DigitsKeyListener.getInstance();
editText2.setKeyListener(digkl2);
//只允许日期
EditText editText3=(EditText)findViewById(R.id.editText3);
DateKeyListener dtkl=new DateKeyListener();
editText3.setKeyListener(dtkl);
//允许12键小键盘布局的多点触摸
EditText editText4=(EditText)findViewById(R.id.editText4);
MultiTapKeyListener multitapkl =
new MultiTapKeyListener(TextKeyListener.Capitalize.WORDS,true);
editText4.setKeyListener(multitapkl);
//允许qwerty布局键盘输入
EditText editText5=(EditText)findViewById(R.id.editText5);
QwertyKeyListener qkl =
new QwertyKeyListener(TextKeyListener.Capitalize.SENTENCES,true);
editText5.setKeyListener(qkl);
}
}
为了使用MultiTapKeyListener,你的手机应该支持12键布局并激活该布局。激活12键布局的方法是选择Settings(设置)→Language and Keyboard(语言与键盘)→On-screen Keyboard Layout(屏显键盘布局),然后选择“Phone layout”(电话布局)选项。
2.13.4 参阅
下表中的Listener类型有助于编写此类应用。