Android edittext 切换焦点或获取焦点时 ,多个eidttext 设置光标到最后一位

Android edittext 切换焦点或获取焦点时 设置光标到最后一位

先说设置光标到最后一位的代码,其实很简单

 editText.setSelection(editText.getText().length());

但是,我们经常用到的情况是,当edittext获取焦点时,光标会默认显示在第一位,需要将光标自动移动到最后一位,这时候就需要在监听事件中设置了

edittext 焦点监听 中设置光标位置

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
     @Override
     public void onFocusChange(View view, boolean b) {
        if(b){
         editText.setSelection(editText.getText().length());
        }   
     }
 });

如此,就能解决当edittext获取到焦点时,自动将光标移动到最后一位。

但是

如果我们遇到下图情况 该怎么处理
在这里插入图片描述
在编辑商品信息时,会有很多输入框要操作。难不成要每个edittext 都要设置一遍焦点监听事件?这样做岂不代码量越来愈多,且冗余

这样当然也可以,封装一个方法,统一设置减少代码量。

比如


private void setFocusLenth(Edittext... edits){
	for(Edittext editText : edits){
		editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
		     @Override
		     public void onFocusChange(View view, boolean b) {
		        if(b){
		         editText.setSelection(editText.getText().length());
		        }   
		     }
		 });
	}
}

这样写就简单多了,而且代码简洁,不用重复用代码单独设置

别高兴的太早

如果项目里有大量的界面都包含很多的edittext编辑框,岂不是写这个也很麻烦。封装在父类中或者是单独的工具类虽然也能解决问题。但是我找到了一个更好的方法。那就是重写viewgroup的focusSearch方法

就用LinearLayout举例

public class FocusLinearlayout extends LinearLayout {
    public FocusLinearlayout(Context context) {
        super(context);
    }

    public FocusLinearlayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public FocusLinearlayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public FocusLinearlayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public View focusSearch(View focused, int direction) {
        if(focused instanceof EditText){
            EditText editText = ((EditText) focused);
            //光标移入文件末尾
            editText.setSelection(editText.getText().length());
        }
        return super.focusSearch(focused,direction);
    }

}

声明一个自定义的类 继承viewgroup(具体是哪个控件可以自己定),然后重写focusSearch。一般切换edittext焦点,是通过键盘中的回车键来操作的,它会响应改方法,这就省去了焦点监听的设置。
这个用法只需要在xml文件中替换对应的viewgroup控件就可以了

到此,文章已经写完了。如果大家有兴趣也可以加QQ(721765299)群交流技术

最后推荐一个我自己写的MVVM开源项目《Open MVVM》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值