Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 751|回复: 0

使用EditText的addTextChangedListener(new TextWatcher())方法- &nbs

[复制链接]

该用户从未签到

发表于 2011-10-24 14:37:08 | 显示全部楼层 |阅读模式
在使用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。否则会有异常发生
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 11:45 , Processed in 0.329585 second(s), 35 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表