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 }

其中红色标记的代码为你想要设置的位置,此处是设置到文本末尾。

时间: 2024-10-10 14:18:12

android 设置EditText光标位置的相关文章

[Android教程]EditText设置/隐藏光标位置、选中文本和获取/清除焦点

有时候需要让光标显示在EditText的指定位置或者选中某些文本.同样,为了方便用户输入以提升用户体验,可能需要使EditText获得或失去焦点. 1. 设置光标到指定位置 EditText et = (EditText) findViewById(R.id.etTest); et.setSelection(2); PS:当内容过多时,可通过设置光标位置来让该位置的内容显示在屏幕上. 2. 隐藏光标 EditText et = (EditText) findViewById(R.id.etTes

EditText设置/隐藏光标位置、选中文本和获取/清除焦点(转)

转:http://blog.csdn.net/dajian790626/article/details/8464722 有时候需要让光标显示在EditText的指定位置或者选中某些文本.同样,为了方便用户输入以提升用户体验,可能需要使EditText获得或失去焦点. 1. 设置光标到指定位置 EditText et = (EditText) findViewById(R.id.etTest); et.setSelection(2); PS:当内容过多时,可通过设置光标位置来让该位置的内容显示在屏

android EditText光标位置(定位到最后)

方法:edittext.setSelection(int); et.setText(content);//设置EditText控件的内容et.setSelection(content.length());//将光标移至文字末尾 (转自:http://blog.csdn.net/sww_simpcity/article/details/8949374)

EditText光标位置

1.xml中设置 gravity="top"  加入edittext框的高度不止一行时,该属性可是光标定位在第一行,不设置的话光标是默认在框的中间 2.etEdit.setSelection(text.length());//光标位置在文字末尾

android 设置EditText只能输入数字

android:numeric="integer" 设置EditText只能输入数字 <EditText android:id="@+id/edit_text" android:layout_width="106dp" android:layout_height="50dp" android:numeric="integer" />

Android:设置EditText 背景

1.android:background 属性指定控件背景 <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="text" android:background="@drawable/editor_selec

C# 设置鼠标光标位置

using System.Drawing; using System.Runtime.InteropServices; namespace ZB.QueueSys.Common { public class MouseHelper { private static MouseHelper instance; public static MouseHelper Instance { get { if (instance == null) instance = new MouseHelper();

EditText设置光标位置问题

普通设置 EditText 光标显示位置的方法就是 et.setSelection(text.length()); et.setSelection(0); 设置0 就是第一位了. 设置text长度就最后了. 可是公司测试时, 在十几个测试机上.有些是好的.有些有问题咯. 最后再网上找到的解决方案 要先设置一下获取焦点 EditText.requestFocus() 再去设置selection 就好了. 版权声明:本文为博主原创文章,未经博主允许不得转载.

android listview 每一项都是edittext 导致的坑爹问题 内容的保存和焦点,光标位置的设置

activity布局:布局很简单,只有一个listview <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_