前言
若Activity中存在可焦点EditText,进入Activity时EditText会默认获得焦点并弹出软键盘,十分影响用户体验。而且,在onCreate(onCreateView)中调用EditText.clearFocus()没有任何作用。在API 26以后可以通过在布局文件中设置android:focusedByDefault="false"来取消默认焦点,但是最低支持API 26并不现实,只能寻求其他解决办法。
常用方法
在EditText的父布局中添加两个属性:
android:focusable="true"
android:focusableInTouchMode="true"
这样,默认焦点行为将被父布局截断,以达到取消EditText默认焦点的目的。
若只是想阻止默认软键盘的弹出,可在AndroidManifest.xml对应Activity中添加属性
android:windowSoftInputMode="stateHidden"
另辟蹊径
当以上方法无法使用时,还有没有什么办法解决问题呢?答案时肯定的。
1. 设置EditText不可焦点
<!--在XML中添加属性-->
android:focusable="false"
// 或者在onCreate中调用
mEditText.setFocusable(false);
2. 在onCreate中添加
mEditText.post(new Runnable() {
@Override
public void run() {
mEditText.setFocusableInTouchMode(true);
}
});
3. 由于mEditText.clearFocus()后Activity会再次寻找默认焦点,因此在需要清除焦点时使用以下语句替代:
mEditText.setFocusable(false);
mEditText.setFocusableInTouchMode(true);