zoukankan      html  css  js  c++  java
  • android 设置EditText光标位置

    Android中有很多可编辑的弹出框,其中有些是让我们来修改其中的字符,这时光标位置定位在哪里呢?
    刚刚解了一个bug是关于这个光标的位置的,似乎Android原生中这种情况是把光标定位到字符串的最前面。需求是将光标定位到字符的最后面。
    修改的地方是TextView这个控件,因为EditText也是继承了TextView。在setText方法中有:

    1  private void setText(CharSequence text, BufferType type,
    2                          boolean notifyBefore, int oldlen) { 
    3 …… 
    4         if (text instanceof Spannable) { 
    5             Spannable sp = (Spannable) text; 
    6  
    7             …… 
    8             if (mMovement != null) { 
    9                 mMovement.initialize(this, (Spannable) text);
    10         //文本是不是Editable的。
    11         if(this instanceof Editable)
    12                      //设定光标位置
    13                      Selection.setSelection((Spannable)text, text.length());
    14 
    15                ……
    16     }

    从红色代码中可以看出,google是要光标处在缺省文本的末端,但是,log发现 (this instanceof Editable)非真,也就是说Selection.setSelection((Spannable)text, text.length());并不会被执行。

    1    Log.d("TextView", "(type == BufferType.EDITABLE)="+(type == BufferType.EDITABLE));
    2    if(type == BufferType.EDITABLE){
    3          Log.d("TextView","Format text.Set cursor to the end ");
    4          Selection.setSelection((Spannable)text, text.length());
    5    }

    这个样修改后即可。

     

    在编写应用的时候,如果我们要将光标定位到某个位置,可以采用下面的方法:

    1 CharSequence text = editText.getText();
    2 //Debug.asserts(text instanceof Spannable);
    3 if (text instanceof Spannable) {
    4     Spannable spanText = (Spannable)text;
    5     Selection.setSelection(spanText, text.length());
    6 }

    其中红色标记的代码为你想要设置的位置,此处是设置到文本末尾。
  • 相关阅读:
    【Vegas原创】解决System.Web.Extensions版本冲突方法
    【Vegas原创】GridView修改表头,并导出Excel(C#版)
    bdump,cdump,udump作用
    【Vegas原创】用正则表达式解决FCKEditor图片路径问题
    【Vegas改编】获取,更新web.config的值
    面向对象和面向过程的区别
    【Vegas原创】删除有内外键关系数据的方法
    提供css滤镜代码,变网页为黑白,为在地震中遇难的同胞哀悼
    【Vegas原创】将treeview父结点的链接改为折叠事件
    C#经典试题
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4351067.html
Copyright © 2011-2022 走看看