EditText使用小结

来自: 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里面,然后结果就是这么神奇,结果起作用了。。

如果谁知道是什么原理请告知,不慎感激。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,502评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,702评论 25 709
  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 5,205评论 0 5
  • 秋之枫。(原作)
    秋之枫520阅读 4,010评论 10 16
  • 我是看着它长大,也是看着它死去的,所以我可以作为它成长的见证人 ——前言 去年这个时间,正是绿萝蓬勃生辉的好时...
    木子言寺月阅读 3,707评论 0 1