Android EditText点击无法获取焦点问题求助
解决EditText无法获取焦点、无法输入的问题
嘿,我之前在ConstraintLayout里搭配日历控件时也碰到过一模一样的EditText焦点问题,给你几个亲测有效的排查和解决方向:
检查父布局的焦点优先级
ConstraintLayout有时候会因为descendantFocusability属性的设置,抢占子View的焦点。你可以给根布局加上这个属性,确保子View优先获取焦点:<android.support.constraint.ConstraintLayout ... android:descendantFocusability="afterDescendants">补全EditText的焦点相关属性
只设置focusable="true"是不够的,触摸模式下必须同时开启focusableInTouchMode才能让EditText获取焦点。修改你的EditText代码:<EditText ... android:focusable="true" android:focusableInTouchMode="true" android:clickable="true" />排查日历控件的事件拦截
如果你的日历控件(不管是系统DatePicker还是自定义的)重写了触摸事件,可能会拦截掉EditText的点击事件。你可以暂时把日历控件隐藏,测试EditText是否能正常获取焦点,来确认是不是这个原因。如果是,可以给EditText设置更高的触摸优先级,或者调整日历控件的事件分发逻辑。代码层面强制触发焦点和软键盘
如果XML配置还是没效果,可以在代码里手动给EditText添加点击事件,强制请求焦点并弹出软键盘:EditText yourEditText = findViewById(R.id.your_edit_text_id); yourEditText.setOnClickListener(v -> { yourEditText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); } });检查其他禁用属性
别忘了排查EditText有没有被设置android:enabled="false"或者android:inputType="none"这类会直接导致无法输入的属性,这些很容易被忽略。
内容的提问来源于stack exchange,提问作者Sountharya
相关产品推荐
相关产品推荐

