2.12使用KeyListener控制输入
问题
您的应用程序包含要在其中限制用户仅输入数字的文本框; 此外,在某些情况下,您只希望允许使用正数,整数或日期。
解
Android提供了KeyListener类来帮助您限制用户只输入数字/正数/整数/正整数等等。
讨论
Android.text.method包包含一个KeyListener接口,以及一些类,例如DigitsKeyListener和DateKeyListener,它们实现了这个接口。
示例2-15是演示这些类中的一些类的示例应用程序。 此布局文件创建五个TextView和五个EditView; TextView显示它们各自的EditText允许的输入类型。
实施例2-16。 主要活动
要使用MultiTapKeyListener,您的手机应该支持12键布局,它需要激活。 要激活12键布局,请转到设置→语言和键盘→屏幕键盘布局,然后选择“电话布局”选项。
以下侦听器类型将用于编写此类型的应用程序。
BaseKeyListener这是一个关键侦听器的抽象基类。
DateTimeKeyListener用于在同一文本字段中输入日期和时间。
MetaKeyKeyListener此基类封装了用于跟踪元键(如SHIFT,ALT和SYM)状态以及选择文本的伪状态的行为。
NumberKeyListener这是用于数字文本输入。
TextKeyListener这是键入正常文本的关键侦听器。
TimeKeyListener这是用于在文本字段中输入时间。
问题
您的应用程序包含要在其中限制用户仅输入数字的文本框; 此外,在某些情况下,您只希望允许使用正数,整数或日期。
解
Android提供了KeyListener类来帮助您限制用户只输入数字/正数/整数/正整数等等。
讨论
Android.text.method包包含一个KeyListener接口,以及一些类,例如DigitsKeyListener和DateKeyListener,它们实现了这个接口。
示例2-15是演示这些类中的一些类的示例应用程序。 此布局文件创建五个TextView和五个EditView; TextView显示它们各自的EditText允许的输入类型。
实施例2-15。 使用TextView和EditTexts布局
<?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-16。 主要活动
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 {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//allows digits with positive/negative signs and decimal points
EditText editText1=(EditText)findViewById(R.id.editText1);
DigitsKeyListener digkl1=DigitsKeyListener.getInstance(true,true);
editText1.setKeyListener(digkl1);
//allows positive integer only (no decimal values allowed)
EditText editText2=(EditText)findViewById(R.id.editText2);
DigitsKeyListener digkl2=DigitsKeyListener.getInstance();
editText2.setKeyListener(digkl2);
//allows date only
EditText editText3=(EditText)findViewById(R.id.editText3);
DateKeyListener dtkl=new DateKeyListener();
editText3.setKeyListener(dtkl);
//allows multitap with 12-key keypad layout
EditText editText4=(EditText)findViewById(R.id.editText4);
MultiTapKeyListener multitapkl =
new MultiTapKeyListener(TextKeyListener.Capitalize.WORDS,true);
editText4.setKeyListener(multitapkl);
//allows qwerty layout for typing
EditText editText5=(EditText)findViewById(R.id.editText5);
QwertyKeyListener qkl =
new QwertyKeyListener(TextKeyListener.Capitalize.SENTENCES,true);
editText5.setKeyListener(qkl);
}
}
要使用MultiTapKeyListener,您的手机应该支持12键布局,它需要激活。 要激活12键布局,请转到设置→语言和键盘→屏幕键盘布局,然后选择“电话布局”选项。
以下侦听器类型将用于编写此类型的应用程序。
BaseKeyListener这是一个关键侦听器的抽象基类。
DateTimeKeyListener用于在同一文本字段中输入日期和时间。
MetaKeyKeyListener此基类封装了用于跟踪元键(如SHIFT,ALT和SYM)状态以及选择文本的伪状态的行为。
NumberKeyListener这是用于数字文本输入。
TextKeyListener这是键入正常文本的关键侦听器。
TimeKeyListener这是用于在文本字段中输入时间。