EditText不自动获得输入焦点(以及 获得焦点但不弹出输入法软键盘的方法)

相信被“EditText自动获得焦点”这个问题困扰的同学,实际上是被“EditText自动获得焦点,引发弹出软键盘"这个问题困扰。

如果是被软键盘问题困扰,请看:android:windowSoftInputMode 属性(输入法软键盘的那点事)


一、EditText不自动获得输入焦点

根据网上的办法整理如下:

step1.所有EditText的布局文件删除自动添加的<requestFocus />

step2.在第一个EditText之前,放一个不可见控件,让其获得焦点,从而截断了EditText获得焦点。(网上说让EditText的父级控件获得焦点,道理是一样的)。通常,放一个不可见的LinearLayout,如下:

            <LinearLayout
                android:id="@+id/getfocus"
                android:layout_width="0px"
                android:layout_height="0px"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="horizontal" >
                <requestFocus /> 
            </LinearLayout>
上述代码大意是使得LinearLayout可以获得焦点。有网友说LinearLayout中缺少<requestFocus />会使得该方法无效,虽然我检验过仍然有效,但是保险起见也加上吧。


该方法有一个问题是,如果该LinearLayout存在focused或者pressed事件,如selector的变色,上述方法会触发这个事件。

而且,通过对微信的UI分析,我发现EditText较好的用户体验是:

进入一个页面时,第一个EditText获得焦点(光标开始闪烁),但是软键盘并不弹出。等用户单击一个EditText时,弹出软键盘。

所以,我认为真正的解决之道不是让EditText不获得焦点,而是获得焦点,但是不弹出软键盘


二、EditText获得焦点,但不弹出软键盘

方法: 工程->Manifest.xml的Application->Activity节点中指定EditText所在活动,该activity的设定android:windowSoftInputMode 属性为stateHidden,如:

        <activity
            android:name="com.navigator.LoginActivity"
            android:label="@string/title_activity_login"
            android:windowSoftInputMode="adjustResize|stateHidden" >
        </activity>
关于android:windowSoftInputMode 属性,见页首链接。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KwCoding

谢了老板您讷~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值