zoukankan      html  css  js  c++  java
  • 使用EditText的addTextChangedListener(new TextWatcher())方法

    (转:http://www.apkbus.com/android-5257-1-14.html)

    在使用EditText的addTextChangedListener(new TextWatcher())方法时(即给EditText增加监听器):
    注意:
      1、在使用里面的函数时,不能没有条件的改变本EditText的内容 , 因为这样容易引起死循环,所以必须要加限制条件
    ////////////////////////////////////////////////////
      //给EditText增加监听器 
      contentEditText.addTextChangedListener(new TextWatcher() {
       
       int l=0;////////记录字符串被删除字符之前,字符串的长度
       int location=0;//记录光标的位置
       @Override
       public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
        
       }
       
       @Override
       public void beforeTextChanged(CharSequence s, int start, int count,
         int after) {
        // TODO Auto-generated method stub
        l=s.length();
        location=contentEditText.getSelectionStart();
       }
       
       @Override
       public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if (l>s.toString().length()) {
         gyf.function.face_analysis faceAnalysis=new gyf.function.face_analysis(releaseComment.this);
         SpannableStringBuilder sBuilder=faceAnalysis.getSpannableStringBuilder(s.toString());
         //eText.setText(sBuilder);
         //eText.setText("");
         contentEditText.setText(sBuilder);
         Editable etable=contentEditText.getText();
         Selection.setSelection(etable, location);
         //Toast.makeText(releaseComment.this, "11111", Toast.LENGTH_SHORT).show();
         
        }

        //Toast.makeText(releaseComment.this, "0000", Toast.LENGTH_SHORT).show();
       }
      });
    2、每次刷新EditText时,光标也会跟着重置,即位置跑到了开头
       如上代码所示。
       有关光标的介绍有:
    提起Android的EditText的光标选择问题,可以通过android.text.Selection包提供的方法来实现,Android SDK提供了有关光标选择的多种方法,比如说getSelectionEnd、getSelectionStart、removeSelection、 selectAll、setSelection,详细的参数声明如下

    final static int  getSelectionEnd(CharSequence text)Return the offset of the selection edge or cursor, or -1 if there is no selection or cursor.final static int  getSelectionStart(CharSequence text)Return the offset of the selection anchor or cursor, or -1 if there is no selection or cursor.final static void  removeSelection(Spannable text)Remove the selection or cursor, if any, from the text.final static void  selectAll(Spannable text)Select the entire text.final static void  setSelection(Spannable text, int index)Move the cursor to offset index.static void  setSelection(Spannable text, int start, int stop)Set the selection anchor to start and the selection edge to stop.



    Android123提示大家,从上面的参数来看,可以发现Spannable类型,常规我们的EditText中的编辑中Editable直接实现Spannable接口,所以我们可以通过下面的方法来设置选择:
      •   Editable ea= etEdit.getText();  //etEdit为EditText
      •   Selection.setSelection(ea, ea.length()-1); // Android开发网提示这里ea的长度必须大于1。否则会有异常发生
  • 相关阅读:
    从Kratos设计看Go微服务工程实践
    京东到家安全测试实践
    浅谈 Protobuf 编码 原创 gsonli 腾讯技术工程 2021-07-14
    API Design Guide
    The power of two choices in randomized load balancing
    NGINX and the "Power of Two Choices" Load-Balancing Algorithm
    SRE 崩溃
    DDoS木马
    String.fromCharCode(88,83,83) 方法返回由指定的 UTF-16 代码单元序列创建的字符串
    汇编语言的AX,BX,CX,DX,分别表示什么
  • 原文地址:https://www.cnblogs.com/jenson138/p/4528286.html
Copyright © 2011-2022 走看看