【Android】如何优雅地解决EditText默认焦点问题

本文介绍了解决Android中EditText默认获得焦点并弹出软键盘的问题,提供了多种方法,包括修改XML属性、使用代码调整焦点策略及在Activity中设置软键盘初始状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

若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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值