Android 输入框限制字符输入数

有时候对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>
时间: 2024-12-15 02:55:37

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

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

package com.android.filebrowser; import java.io.*; import java.net.*; public class FileEncodingDetect { static final int GB2312 = 0; static final int ASCII = 1; static final int UTF8 = 2; static final int UNICODE = 3; //static final int GBK = 4; //st

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

Intent intent = getIntent(); String contentUri = null; Uri uri =null; if (intent.getData() != null) { uri = intent.getData(); contentUri = "file".equals(uri.getScheme()) ? FileContentProvider.BASE_URI + uri.getEncodedPath() : uri.toString(); Str

android studio 非法字符: &#39;\ufeff&#39; 解决方案

今天发现一个问题,就是从其他四方拷贝的代码到AS项目里面,木有语法 错误,但是就是运行不起来,老是报错"非法字符: '\ufeff' ",郁闷很久,木有看到这个字符,最后查询了这个问题,原来很简单,原来是文件的隐藏编码问题,这个文件是utf-8 + BOM的,而项目是采用的utf-8,找到问题原因就好办了,用其他文件浏览工具打开这个文件,重新以uft-8格式保存即可. 版权声明:本文为博主原创文章,未经博主允许不得转载. android studio 非法字符: '\ufeff' 解决

android studio 非法字符: &amp;#39;\ufeff&amp;#39; 解决方式

今天发现一个问题,就是从其它地方拷贝的代码到AS项目里面,木有语法 错误,可是就是执行不起来,老是报错"非法字符: '\ufeff' ",郁闷非常久.木有看到这个字符.最后查询了这个问题.原来非常easy,原来是文件的隐藏编码问题.这个文件是utf-8 + BOM的,而项目是採用的utf-8.找到问题原因就好办了,用其它文件浏览工具打开这个文件,又一次以uft-8格式保存就可以. android studio 非法字符: '\ufeff' 解决方式

Android输入框的联动控制

/** * 对一些含有两个输入框和一个确认按钮的页面,比如登录注册页面,一般是一个账号输入框.一个密码输入框.以及一个确认按钮.* 点击第二个输入框弹出键盘时,键盘常常会把确认按钮给遮挡住,这时,我们常常要求将确认按钮框上移至输入框之上,以避免遮挡确认按钮.* 下面三个类即实现了此种功能,代码独立,用法简单快捷** 1. 一个输入框时: * new SoftInputOneEdtCtrl(your FragmentActivity).register(View viewBaseline, Vie

【Android】android 输入框EditText禁止输入Emoji表情符

转载地址:http://blog.csdn.net/elsdnwn/article/details/45390771 package com.liujy.ui.wiget;import android.content.Context;import android.text.Editable;import android.text.Selection;import android.text.Spannable;import android.text.TextWatcher;import andro

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

1. 效果图 2. 实现的代码 firstActivity.java package iflab.test; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.widget.TextView; import android.widget.Toast; public class fir

解决Android studio 非法字符的问题

前言:今天遇到一个问题,从一个项目中把一些类拷贝到Android studio 里面,运行的时候,报错. 显示刚才拷贝的类中有非法字符,我又检查了一遍,发现类中没有非法字符. 在网上查到了,相关的解决方案: 1.错误: 2.原因:         Eclipse可以智能的把UTF-8+BOM文件转为普通的UTF-8文件,Android Studio还没有这个功能,         所以使用Android Studio编译UTF-8+BOM编码的文件时会出现” 非法字符: '\ufeff' “之类

初入android驱动之字符设备(三)

回想当初在大学玩51单片机的时候,实验室的老师第一个任务,就是设计一个基于51单片机的LED流水灯设计,并实现几种样式.第二个任务,就是设计一个基于51单片机的按键控制LED流水灯样式的设计.需要自己设计硬件图.画protel电路图,并设计出PCB,实现keil和proteus的联调,然后焊接电路板,实现其功能.那时候什么都不懂,秉这一股冲劲,各种百度.看书,那时候郭天祥的51单片机视频超火,所以那时候基本以他的书和视频学得,牛人,膜拜. 所以,这主要讲关于按键最简单的字符驱动,通过设置连接该引