《Android应用开发攻略》——2.13 用KeyListener控制输入

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类型有助于编写此类应用。
image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值