EditText使用小结
2016-05-12 本文已影响92人
技术特工队
来自: Android梦想特工队
作者: Aaron
主页: http://www.wxtlife.com/
原文连接: http://www.wxtlife.com/2016/05/12/editext-use-summary/
EditText点击首次获得焦点后默认光标在最后的实现
这个本身是一个比较简单的问题了,大家一想都知道,设置OnFocusChangeListener
方法,在hasFocus为true时调用setSelection(int)
方法将光标移动到最后的位置。然后将事件绑定到EditText上即可,但是但是... 不起作用,不起作用,代码如下:
editText.setOnFocusChangeListener(mFocusChangeListener);
private View.OnFocusChangeListener mFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
Log.v("Aaron","has focus ");
setEditTextCursorToLast();
}
}};
private void setEditTextCursorToLast() {
editText.setSelection(editText.getText().toString().length());
}
百思不得其解,搜索半天各种方法试过一轮后,怀疑是点击时候是先执行了onFocus,之后由于点击事件强制将光标又移至到点击的位置,导致不能设置的问题。那么尝试解决这个问题就是在focus的时候延迟下执行。。。把上面方法改为如下:
private void setEditTextCursorToLast() {
edittext.post( new Runnable() {
@Override
public void run() {
mMailTitleEditText.setSelection(mMailTitleEditText.getText().toString().length());
}
});
}
其实也没有怎么延迟了。。仅仅是把执行的代码放在了一个runnable里面,然后结果就是这么神奇,结果起作用了。。
如果谁知道是什么原理请告知,不慎感激。