美文网首页
EditText 你所不知道的东西

EditText 你所不知道的东西

作者: goldenfire | 来源:发表于2017-11-15 15:41 被阅读23次

    本篇不适合初学者阅读。

    EditText设置 不可粘贴

    自定义EditText。重写public boolean onTextContextMenuItem(intid)  方法。

    如果要设置edittext不可编辑:

    只要失去焦点就可以。也可以设置editable,不过edittext继承自Textview,不可编辑没什么实际意义

    如果输入的内容想进行替换,必须输入小写转大写:

    设置public final void setTransformationMethod(TransformationMethod method) ,这个是从textview继承过来的api。 例如:

    class AllCapTransformationMethod extends ReplacementTransformationMethod {

    @Override

    protected char[] getOriginal() {

    char[] aa = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

    returnaa;

    }

    @Override

    protected char[] getReplacement() {

    char[] cc = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

    returncc;

    }

    }

    /**

    * This transformation method causes the characters in the {@link#getOriginal}

    * array to be replaced by the corresponding characters in the

    * {@link#getReplacement} array.

    */

    public abstract classReplacementTransformationMethod

    implementsTransformationMethod

    注意,仅仅是显示的时候进行了转换,如果getText 取的还是原值。其实就是修改了缓存。具体可以看源码。

    如果想对出入的内容做修改,例如:输入两个字符加一个空格,在输入10个字符加一个空格等。可以再TextWatcher中

    insert 或者delete等操作,改变文本,集体逻辑自己想。但是注意见下:

    addTextChangedListener(mTextWatcher);即可,private class SeparatorTextWatcher implements TextWatcher {

    @Override

    public void beforeTextChanged(CharSequence s,intstart,intcount,intafter)

    可以具体查看改变前的值。

    @Override

    public void onTextChanged(CharSequence s,intstart,intbefore,intcount)

    可以具体查看改变后的值。

    @Override

    public void afterTextChanged(Editable s) 

    可以修改值。具体详见Editable。

    public interface Editable

    extends CharSequence, GetChars, Spannable,Appendable

    }

    可以看到一个是改变前,一个是改变的时候,一个是改变后。 改变的时候会先走onTextChanged,然后再走 afterTextChanged。

    注意:如果在TextWatcher中对文本做就该,如:setText ,会再次执行TextWatcher, 所以一定要先removeTextChangedListener,再setText,然后再addTextChangedListener回来。Edittext加载TextWatcher时就会遍历一遍api,切勿在其中直接setText等操作。死循环。

    相关文章

      网友评论

          本文标题:EditText 你所不知道的东西

          本文链接:https://www.haomeiwen.com/subject/bqzcvxtx.html