您的位置:首页 > 移动开发 > Android开发

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

2016-06-17 11:03 489 查看
  转载地址:  http://m.blog.csdn.net/article/details?id=48414821
相信被“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 属性,见页首链接。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 输入法