必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android学习之自定义TextWatcher来监听文本最大输入字数

时间:2019-06-21 09:43:12来源:IT技术作者:seo实验室小编阅读:58次「手机版」
 

textwatcher

开发中有种很可能会遇到的需求就是限制EditText的文本输入字数,例如微博就限制140字,如果只是限制输入的字数的话很简单,EditText有个属性叫Android:maxLength,设置140就行了,但是当达到最大输入字数时还要提示用户达到了呢?这时候就需要自定义textwatcher了,TextWatcher字如其意,就是文本观察器,用来观察文本的变化的,一般用在EditText中。好了,上代码

布局中画个EditText就行了,先看自定义的TextWatcher,除了达到最大字数时会弹出toast,同时也会将光标放置在文本最后:

/**
 * 最大输入观察器
 * 监听输入内容是否超出最大长度,并设置光标位置
 *
 * @author yuzhentao
 */
public class MaxInputTextWatcher implements TextWatcher {

    private context context;

    private EditText editText = null;
    private int maxLength = 0;

    public MaxInputTextWatcher(Context context, EditText editText, int maxLength) {
        this.context = context;
        this.editText = editText;
        this.maxLength = maxLength;
    }

    @Override
    public void beforeTextChanged(Charsequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Editable editable = editText.getText();
        int length = editable.length();//原字符串长度
        if (length > maxLength) {//如果原字符串长度大于最大长度
            int selectEndIndex = Selection.getSelectionEnd(editable);//getSelectionEnd:获取光标结束的索引值
            String str = editable.toString();//旧字符串
            String newStr = str.substring(0, maxLength);//截取新字符串
            editText.setText(newStr);
            editable = editText.getText();
            int newLength = editable.length();//新字符串长度
            if (selectEndIndex > newLength) {//如果光标结束的索引值超过新字符串长度
                selectEndIndex = editable.length();
                toast.maketext(context, "最多只能输入" + selectEndIndex + "个字哦", Toast.LENGTH_SHORT).show();
            }
            Selection.setSelection(editable, selectEndIndex);//设置新光标所在的位置
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }

}
首先当然是实现TextWatcher了,会实现3个方法,一般我们都在onTextChanged()中操作,细节大家看代码就行。

然后就是主界面中去使用这个自定义的TextWatcher了:

/**
 * 主界面
 *
 * @author yuzhentao
 */
public class MainActivity extends Activity {

    private Context context;

    @Override
    protected void onCreate(Bundle savedinstanceState) {
        super.onCreate(savedInstanceState);
        setcontentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        context = this;
        EditText et = (EditText) findViewById(R.id.edittext_activity_main);
        et.addTextChangedListener(new MaxInputTextWatcher(context, et, 140));
    }

}
通过addTextChangedListener()来使用这个自定义的TextWatcher,输入自己想要的最大输入字数即可。

一个很简单的功能,希望对大家有所帮助。

效果图:

Demo地址:http://download.csdn.net/detail/qq_23940659/9468880

相关阅读

死链接和锚文本分别是什么意思?

  死链接和锚文本分别是什么意思?在seo优化中的死链指的是失效的链接、错误链接,它原本是正常的,但是后来变成无效的链接,使得网页

K线图 自定义K线图

Android股票K线图 纯自定义View 仿火币页面先放几张效果图,不是太会录,动态图做的不太好将就看Demo 地址先放几张效果图,不是太会录,

android向联系人中添加头像以及获得电话记录

Java代码 <pre name="code" class="java">ContentResolver cr = getContentResolver();Cursor cursor = cr.query(ContactsContr

二进制文件、文本文件

先说结论: 二进制文件和文本文件都是按照二进制存储的,只不过文本文件是把一个字节一个字节解读成字符,而二进制文件可以任意定义解

Android中Adapter的notifyDataSetInvalidated()和noti

notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。public void

分享到:

栏目导航

推荐阅读

热门阅读