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

简介: 本节书摘来自华章计算机《Android应用开发攻略》一书中的第2章,第2.13节,作者:(美)达尔文(Darwin, I. F.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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

相关文章
|
7月前
|
Android开发
Android应用开发权限
Android应用开发权限
44 1
|
9月前
|
XML Java 测试技术
车载Android应用开发与分析 - SystemUI 「功能」与「源码结构」分析
本期内容开始,我们将介绍原生Android Automotive中车载应用的实现方式和它的原理。首先要介绍的就是车载应用开发中非常重要的一个系统应用,Android系统的UI - SystemUI。
514 1
车载Android应用开发与分析 - SystemUI 「功能」与「源码结构」分析