有时候对Android的输入框有字符输入数量的限制,而且显示字符输入的数量。通过下面方式能够实现:

1.自己定义LimitNumEditText继承EditText

import android.content.Context;
import android.content.res.TypedArray;
import android.telephony.SmsMessage;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.widget.EditText; import us.pinguo.cc.R; /**
* Created by crab on 15-3-18.
*/
public class LimitNumEditText extends EditText {
private int mMaxLength;
private OnTextCountChangeListener mTextCountChangeListener; public LimitNumEditText(Context context) {
this(context, null);
} public LimitNumEditText(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LimitNumEditText);
mMaxLength = typedArray.getInt(R.styleable.LimitNumEditText_maxLength, -1);
typedArray.recycle();
if (mMaxLength >= 0) {
setFilters(new InputFilter[]{new InputFilter.LengthFilter(mMaxLength)});
} else {
setFilters(new InputFilter[0]);
}
addTextChangedListener(null);
}
/**
* @return 返回限制输入的最大字符数量
*/
public int getLimitLength(){
return mMaxLength;
}
@Override
public void addTextChangedListener(final TextWatcher watcher) {
TextWatcher inner=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(watcher!=null){
watcher.beforeTextChanged(s,start,count,after);
}
} @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int[] params= SmsMessage.calculateLength(s,false);
int use=params[1];
if(mMaxLength>=0 && mTextCountChangeListener!=null){
mTextCountChangeListener.onTextCountChange(use,mMaxLength);
}
if(watcher!=null){
watcher.onTextChanged(s,start,before,count);
}
} @Override
public void afterTextChanged(Editable s) {
if(watcher!=null){
watcher.afterTextChanged(s);
}
}
};
super.addTextChangedListener(inner);
} public LimitNumEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setOnTextCountChangeListener(OnTextCountChangeListener listener){
mTextCountChangeListener=listener;
}
/**
* 监听输入框字符变化
*/
public interface OnTextCountChangeListener{
/**
*
* @param use 输入字符赞据的大小
* @param total 限制输入数量的上线
*/
public void onTextCountChange(int use, int total);
}

2.改动res/values/attrs.xml文件,添加例如以下行

  <declare-styleable name="LimitNumEditText">

        <attr name="maxLength" format="integer" />

    </declare-styleable>

3.在布局文件里使用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:algnText="http://schemas.android.com/apk/res-auto"
android:background="#FFFFFF"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.crab.mycameratest.LimitNumEditText
algnText:maxLength="20"
android:id="@+id/id_edit_text_test"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</LinearLayout>


Android 输入框限制字符输入数的更多相关文章

  1. #首行输入数n,接下来输入n行数,以空格隔开

    #首行输入数n,接下来输入n行数,以空格隔开 n = int(raw_input())# print nL = []for i in range(n): L.append([int(x) for x ...

  2. 解决Android studio 非法字符的问题

    前言:今天遇到一个问题,从一个项目中把一些类拷贝到Android studio 里面,运行的时候,报错. 显示刚才拷贝的类中有非法字符,我又检查了一遍,发现类中没有非法字符. 在网上查到了,相关的解决 ...

  3. Android -- 重设字符并统计原字符以及修改字符的长度以及位置

    1. 效果图

  4. android输入框显示在软键盘上边

    有时候在界面需要输入的时候,如果输入框在界面的下方,软键盘弹出的时候会遮挡输入框界面,对用户的体验不是很好. 在网上找的别人的解决方案 首先: 清单文件里面配置:android:windowSoftI ...

  5. openfl更新2.0后,android输入法又不能输中文了

    今天手贱更新了一下openfl,fd里面又各种报错.最伤心的是,之前修改MainView.java输入中文的方法现在居然失效了.还好这段时间研究c2dx,总算是能读能懂修改的那段代码,捣鼓了一下午,算 ...

  6. Android开发匹配字符笔记

    Windows下的回车换行符是\r\n,而Linux下的回车换行符是\n 所以,在windows下可以用\r\n,而在linux下要用\n 并且还发现在linux下(既在android上开发)需要匹配 ...

  7. Android中判断字符是否为中文、韩文、日文

    我们经常需要在程序中判断一个字符是否为CJK(Chinese.Japanese.Korean)语言的字符. 例如,在Contacts里面程序需要判断联系人姓名的所属语言. 今天为大家介绍一种NameS ...

  8. Android中检测字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(一)

    package com.android.filebrowser;   import java.io.*; import java.net.*;   public class FileEncodingD ...

  9. 从键盘输入数,输出它们的平方值&判断是不是2的阶次方数

    1.从键盘输入两个整数,然后输出它们的平方值和立方值 在Java中,没有像C语言那样有一个专供接受键盘输入值的scanf函数,所以一般的做法是从键盘输入一行字符,保存到字符串s中,再将字符组成的字符串 ...

随机推荐

  1. [terry笔记]对人员列表文件进行数据库操作

    原文件(数据已经脱敏): staff_id,name,age,phone,dept,enroll_date1,姬建明,25,152015410,运维,2013-11-012,刘海龙,26,186184 ...

  2. 为什么要重写toString()方法

    因为在System.out.println(类的对象名)时,类的对象名是个引用,如果不重写,就输出引用地址. 其实实际是这样的System.out.println(类的对象名.toString()), ...

  3. NYIST 1030 Yougth's Game[Ⅲ]

    Yougth's Game[Ⅲ]时间限制:3000 ms | 内存限制:65535 KB难度:4 描述有一个长度为n的整数序列,A和B轮流取数,A先取,每次可以从左端或者右端取一个数,所有数都被取完时 ...

  4. glove入门实战

    前两天怒刷微博,突然发现了刘知远老师分享的微博,顿时眼前一惊.原Po例如以下: http://weibo.com/1464484735/BhbLD70wa 因为我眼下的研究方向是word2vec.暗自 ...

  5. Hibernate关系映射中的注解

    一.@Entity 写在映射表的类上面,表示这是映射来的实体 二.@Id @Column(name = "fid", nullable = false) @Basic @Colum ...

  6. c++ STL unique , unique_copy函数

    一.unique函数 类属性算法unique的作用是从输入序列中"删除"全部相邻的反复元素. 该算法删除相邻的反复元素.然后又一次排列输入范围内的元素,而且返回一个迭代器(容器的长 ...

  7. 杭电3501Calculation 2 欧拉函数

    Calculation 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. virtio netdev的创建

    Linux眼下支持至少了8种虚拟化系统: Xen KVM VMware's VMI IBM's System p IBM's System z User Mode Linux lguest IBM's ...

  9. Oracle 11g AWR生成报告

    1.生成单实例 AWR 报告: @$ORACLE_HOME/rdbms/admin/awrrpt.sql 2.生成 Oracle RAC AWR 报告: @$ORACLE_HOME/rdbms/adm ...

  10. [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)

    题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...