最近在写EditText的时候发现EditText.clearFocus()无效
第一个EditText设置clearFocus()之后还是能取得焦点
原因:
查看源码发现clearFocus()执行之后有会按照先序遍历查找一个设置了focusInTouchMode(true)的view设置焦点,如果你的EditText是布局中的第一个拥有focusInTouchMode(true)的控件,则EditText.clearFocus()之后又给这个EditText设置了焦点,所以会造成EditText.clearFocus()无效的效果
第一种解决方案:
在第一个EditText控件之前的View设置
- View.setFocusableInTouchMode(true)
我这里选的是EditText之前的一个TextView
TextView textView=findViewById(R.id.textView2);
textView.setFocusableInTouchMode(true);
之后就可以解决 EditText.clearFocus()无效的问题了
第二种解决方案:
如果EditText是布局中的第一个控件怎么办?
可以把EditText的父布局设置
- ViewGroup.setFocusableInTouchMode(true)
例如我最外层是一个ConstraintLayout布局,我可以给它设置
ConstraintLayout constraintLayout=findViewById(R.id.cl_parent); constraintLayout.setFocusableInTouchMode(true);
也可以解决 EditText.clearFocus()无效的问题
_____________________________________分割线______________________________________________