Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐)

 更新时间:2016年11月22日 16:24:59   作者:邹奇  
这篇文章主要介绍了Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐)的相关资料,需要的朋友可以参考下

 做这个功能是因为开发项目的时候,由于后台接口的一些参数的值的长度有要求,不能超过多少个字符,所以在编辑框中输入的字符是要有限制的。

下面就来看一下demo的实现过程:

首先,在xml控件中放置一个EditText控件,然后初始化该控件并对该控件添加文本监听。xml自己简单的设计一下,代码较为简单,直接上代码:

package com.example.edittext;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends Activity {
private static final int LIMIT = 10;// 最大字数限制
private EditText et_word_limit;// EditText控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取EditText控件
et_word_limit = (EditText) findViewById(R.id.editText1);
setListeners();// 编辑框添加文本监听
}
private void setListeners() {
// editText控件添加文本变化监听
et_word_limit.addTextChangedListener(new MyTextWatcher(et_word_limit, LIMIT, MainActivity.this));
}
}

上面的代码中给EditText控件添加文本监听的时候,我用的是自定义的TextWatcher,需要传过去的参数有三个,方法为:

// editText控件添加文本变化监听
et_word_limit.addTextChangedListener(new MyTextWatcher(et_word_limit, LIMIT, MainActivity.this));

一个是EditText控件,即要添加监听的那个编辑框控件;

一个是字符的限制数目,即最多能在编辑框中输入的内容;

一个是当前类的上下文对象。

当然,你要是还想再添加一个TextView控件实时显示输入的字符个数的话,那就再传一个参数过去就行。反正具体需求,具体实现就行了,变化也不大,自己学会变通。

最关键的类,自定义的TextWatcher类如下,代码如下:

package com.example.edittext;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
/**
* 自定义MyTextWatcher类实现TextWatcher接口,并重写相关方法
* 
* @author 邹奇
*
*/
public class MyTextWatcher implements TextWatcher {
private int limit;// 字符个数限制
private EditText text;// 编辑框控件
private Context context;// 上下文对象
int cursor = 0;// 用来记录输入字符的时候光标的位置
int before_length;// 用来标注输入某一内容之前的编辑框中的内容的长度
public MyTextWatcher(EditText text, int limit,
Context context) {
this.limit = limit;
this.text = text;
this.context = context;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
before_length = s.length();
}
/**
* s 编辑框中全部的内容 、start 编辑框中光标所在的位置(从0开始计算)、count 从手机的输入法中输入的字符个数
*/
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
cursor = start;
// Log.e("此时光标的位置为", cursor + "");
}
@Override
public void afterTextChanged(Editable s) {
// 这里可以知道你已经输入的字数,大家可以自己根据需求来自定义文本控件实时的显示已经输入的字符个数
Log.e("此时你已经输入了", "" + s.length());
int after_length = s.length();// 输入内容后编辑框所有内容的总长度
// 如果字符添加后超过了限制的长度,那么就移除后面添加的那一部分,这个很关键
if (after_length > limit) {
// 比限制的最大数超出了多少字
int d_value = after_length - limit;
// 这时候从手机输入的字的个数
int d_num = after_length - before_length;
int st = cursor + (d_num - d_value);// 需要删除的超出部分的开始位置
int en = cursor + d_num;// 需要删除的超出部分的末尾位置
// 调用delete()方法将编辑框中超出部分的内容去掉
Editable s_new = s.delete(st, en);
// 给编辑框重新设置文本
text.setText(s_new.toString());
// 设置光标最后显示的位置为超出部分的开始位置,优化体验
text.setSelection(st);
// 弹出信息提示已超出字数限制
Toast.makeText(context, "已超出最大字数限制", Toast.LENGTH_SHORT).show();
}
}
}

上面的代码已经给出了注释,说的也很明白,下面说说我的思路吧!

首先,这个自定义的类需要实现TextWatcher接口,并重写相关的方法。

这时候,需要先知道编辑框没有输入内容之前里面的字符个数,需要知道输入内容时候的光标所在的位置,需要知道输入内容完毕后编辑框里的字符的个数。这些知道后就简单了,最大限制数你是知道的;这时候只需要根据以上的一些数据来删除超出部分字符就可以了。这个具体的实现方法写在了

public void afterTextChanged(Editable s){} 

重写的方法里面,关键的注释都有,大家可以好好的研究一下,说不定会有更加简单的方法。

以上所述是小编给大家介绍的Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android 代码写控件代替XML简单实例

    Android 代码写控件代替XML简单实例

    这篇文章主要介绍了Android 代码写控件代替XML简单实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android开发实现简单计算器功能

    Android开发实现简单计算器功能

    这篇文章主要为大家详细介绍了Android开发实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Android Studio开发之 JNI 篇的简单示例

    Android Studio开发之 JNI 篇的简单示例

    本篇文章主要介绍了Android Studio开发之 JNI 篇的简单示例,它提供了若干的API实现了Java和其他语言的通信,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android给通知channel静音的方法实例

    Android给通知channel静音的方法实例

    这篇文章主要给大家介绍了关于Android如何给通知channel静音的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Android Universal ImageLoader 缓存图片

    Android Universal ImageLoader 缓存图片

    Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载,通过本文给大家介绍Android Universal ImageLoader缓存图片相关资料,涉及到imageloader缓存图片相关知识,对imageloader缓存图片相关知识感兴趣的朋友一起学习
    2016-01-01
  • Android自定义View实现简易画板功能

    Android自定义View实现简易画板功能

    这篇文章主要介绍了Android自定义View实现简易画板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 浅谈Android Dialog窗口机制

    浅谈Android Dialog窗口机制

    本文主要介绍了Android Dialog窗口机制,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android实现ListView的A-Z字母排序和过滤搜索功能 实现汉字转成拼音

    Android实现ListView的A-Z字母排序和过滤搜索功能 实现汉字转成拼音

    这篇文章主要为大家详细介绍了Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音功能
    2017-06-06
  • 使用Fragment来处理Andoird app的UI布局的实例分享

    使用Fragment来处理Andoird app的UI布局的实例分享

    这篇文章主要介绍了使用Fragment来处理Andoird appUI布局的实例分享,Fragment的出现缓解了代码依赖于Activity而造成的臃肿状况,需要的朋友可以参考下
    2016-02-02
  • 什么是Android静默拍摄 Android静默拍摄app制作方法

    什么是Android静默拍摄 Android静默拍摄app制作方法

    这篇文章主要告诉大家什么是Android静默拍摄,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03

最新评论