editText限制输入的4种方法
来源:互联网 发布:北京软件大学 编辑:程序博客网 时间:2024/05/19 15:22
XML布局文件限制:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical" > <!--方法1 xml中配置inputType。--> <EditText android:id="@+id/et1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="只限数字(xml中 配置inputType)" android:inputType="number" /> <!--方法2 xml中配置digits --> <EditText android:id="@+id/et2" android:layout_width="match_parent" android:layout_height="wrap_content" android:digits=" .@~-,:*?!#/\\=+?^;%$()[]{}|`<>&"'_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ" android:hint="只限自定义特殊字符(xml中 配置digits)" /> <EditText android:id="@+id/et3" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="只限abcd(java中使用addTextChangedListener)" /> <EditText android:id="@+id/et4" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="只限wxyz(java中使用setFilters)" /></LinearLayout>
java代码中限制:
package com.example.editText;import android.app.Activity;import android.os.Bundle;import android.text.InputFilter;import android.text.Spanned;import android.text.method.DigitsKeyListener;import android.util.Log;import android.widget.EditText;/* * 方式1:xml中配置inputType。 常用于限制为 Date,time,number,Email,phone等常用的格式 * 方式2:xml中配置digits。可以自定义限制的区间。 * 方式3:java中使用setKeyListener,添加DigitsKeyListener。(方法2就是最终就是通过该方法实现) * 方法4:java中使用setFilters,添加InputFilter。可以在回调函数filter中自己写处理,最后返回处理过的CharSequence对象。 * * 方法:java中使用addTextChangedListener,添加 TextWatcher。不可行!!! (具体见最下面注释) */public class MainActivity extends Activity { private EditText et3, et4; private final static String ET3_DIGITS = "abcd"; private final static String ET4_DIGITS = "wxyz"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et3 = (EditText) findViewById(R.id.et3); et4 = (EditText) findViewById(R.id.et4); //方式3:java中使用setKeyListener,添加DigitsKeyListener。 et3.setKeyListener(DigitsKeyListener.getInstance(ET3_DIGITS)); //方法4:java中使用setFilters,添加InputFilter。 et4.setFilters(new InputFilter[] {new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { //source:你即将输入的字符序列 Log.d("jie","source = "+source); //start:默认为0, end:你即将输入的字符序列的长度 Log.d("jie","start = "+ start); Log.d("jie","end = "+ end); //dest:当前EditText显示的内容 Log.d("jie","dest = "+dest); //经测试dstart和dend 总是相等,都表示输入前光标所在位置 Log.d("jie","dstart = "+dstart); Log.d("jie","dend = "+dend); StringBuffer sb = new StringBuffer(); for (int i = 0; i < source.length(); i++) { if (ET4_DIGITS.indexOf(source.charAt(i)) >= 0) { sb.append(source.charAt(i)); } } return sb; } }}); //使用TextWatcher,虽然能够检测到text 内容修改,但是不能进行重新赋值,因为你如果重新setText,又会重新触发该监听,会形成死循环,最终导致栈溢出。故该方法不可行 /*et3.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { if (ET3_DIGITS.indexOf(s.charAt(i)) >= 0) { sb.append(s.charAt(i)); } } et3.setText(sb); } });*/ }}
0 0
- editText限制输入的4种方法
- editText限制输入的4种方法
- editText限制输入的5种方法
- 如何限制edittext输入字数 3种方法的
- EditText限制字符输入的几种方法
- Android设置EditText输入字数限制的两种方法!
- android EditText限制输入字数的方法
- 限制EditText必须输入中文的方法
- EditText限制输入类型方法
- android EditText 限制输入条件的 4种方式
- EditText中输入信息的限制的方法
- 关于在Android中限制EditText输入条件的方法
- EditText中禁止输入中文的方法及长度限制
- 限制EditText的输入字数
- 限制EditText的输入内容
- EditText的输入限制类型
- Android-EditText两种方法限制输入两位小数
- EditText限制输入字符类型的几种方式
- 设计模式
- 设计模式之单例模式(Singleton Pattern)C++实现
- n皇后问题 NOJ 1319
- C++ 深度全面学习
- Generate Parentheses - LeetCode
- editText限制输入的4种方法
- 利用jwplayer的API实现播放定时弹出框效果
- HDU1863----畅通工程
- CodeForces 402A Nuts (二分)
- [省选前题目整理][BZOJ 1857][SCOI 2010]传送带(三分套三分)
- 10^n个整数(亿级)的排序 .
- 算法导论 第18章 思考题18-2 2-3-4树的链接与分裂,推广至B树
- android AsyncTask介绍
- 2015年大一下第5周项目5-友元类