Android中如何设置TextInputEditText默认不获取焦点
配置不生效的原因
android:focusedByDefault仅作用于当前控件本身,而TextInputLayout作为可聚焦的父容器,未设置该属性时会默认抢占焦点,再自动传递给内部的TextInputEditText,因此仅给EditText设置属性无法生效。
方案1:XML层面修改(优先推荐,无需写逻辑代码)
- 找到你整个布局的根容器标签(比如
ConstraintLayout/LinearLayout等),添加以下两个属性,让根布局优先抢占初始焦点:
android:focusable="true" android:focusableInTouchMode="true"
- 给所有
TextInputLayout也添加android:focusedByDefault="false"属性,避免父容器抢占焦点后传递给子EditText:
<com.google.android.material.textfield.TextInputLayout ... 原有属性不变 android:focusedByDefault="false">
- 如果你不需要按钮默认获取焦点,删掉Button上的
android:focusedByDefault="true"属性即可。
方案2:清单文件配置(同时禁止启动时自动弹出输入法)
如果你还想同时避免启动时输入法自动弹出,可以在AndroidManifest.xml中对应Activity的标签下添加属性:
<activity android:name=".你的注册页Activity类名" android:windowSoftInputMode="stateHidden|adjustResize" />
方案3:代码层面强制清除焦点(极端情况备用)
如果以上方案都不生效,在Activity的onCreate方法中添加代码,启动后手动清除所有输入框的焦点:
// Kotlin 示例 bio.editText?.clearFocus() password.editText?.clearFocus()
// Java 示例 if (bio.getEditText() != null) bio.getEditText().clearFocus(); if (password.getEditText() != null) password.getEditText().clearFocus();
内容的提问来源于stack exchange,提问作者Hassam Ullah
相关产品推荐
相关产品推荐

