有时候对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. 【henuacm2016级暑期训练-动态规划专题 C】Little Girl and Maximum XOR

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑r最后的二进制形式为 1xxxxx 那么我们肯定想让第一个最高位的1保留. 因此我们选取的另外一个数字 一定是 0xxxxx的形 ...

  2. Css学习总结(2)——60个有用CSS代码片段

    1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...

  3. android 联系人中,在超大字体下,加入至联系人界面(ConfirmAddDetailActivity)上有字体显示不全的问题

    联系人(Contacts)中,在超大字体下.加入至联系人界面 (ConfirmAddDetailActivity)上有字母显示不全,如"j"等 这是android布局比較紧凑引起的 ...

  4. 改动android 系统时间

    命令如 date -s "yyyymmdd.[[[hh]mm]ss]" 直接在CRT上执行,举例:date -s "20120801.120503" 但在adb ...

  5. 关于sql中的with(nolock)

    SQL Server 中的 NOLOCK 究竟是什么意思 一般用于此类语句中:select * from t with(NOLOCK) nolock是不加锁查询.能够读取被事务锁定的数据,也称为脏读. ...

  6. POJ2449题解

    先讲一个为了少打一些代码而滥用继承终于接受慘痛教训的故事. #include <cstdio> #include <algorithm> #include <queue& ...

  7. C/S和B/S交互

    近期一直在做C/S的项目,每天都超忙,抽个时间写篇博客,之前一直做C/S项目就是各种窗口.各种控件,拖来拖去,然后点进去写方法,做BS的时候呢,由于一直使用的是mvc,所以就是常常手写代码.或者拖引用 ...

  8. hdu_4707

    算是水题一道吧,我也没有建树,看别人又用vector,又用bfs,dfs的,对vector不熟,所以就模拟了一下 #include<iostream> #include<string ...

  9. linux进程控制函数详解

    进程控制 fork函数 创建一个子进程. pid_t fork(void); 失败返回-1:成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0 pid_t类型表示进程ID,但为了表示-1, ...

  10. xBIM 高级02 插入复制功能

    系列目录    [已更新最新开发文章,点击查看详细]  IFC 模型中的合并和删除实体是一个非常重要的任务,因为 IFC 不是一个分层结构.它是一个复杂的结构,具有潜在的循环关系,是一个双向导航.在单 ...