问题描述
我的应用里有一个 Activity ,其中包含一个 EditText 和 一个 ListView ,当 Activity 启动时,EditText 会立即获得焦点,我尝试了下面的这句:
EditText.setSelected(false);
但无济于事,请问 Activity 启动时如何阻止 EditText 获得焦点?
高票答案1
在 EditText 的父组件(比如 LinearLayout )中添加如下两个属性:
android:focusable="true"
android:focusableInTouchMode="true"
如果没有父组件的话可以添加一个隐藏的 LinearLayout ,并加上上面的两个属性:
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px" />
高票答案2
你是不想让它获得焦点?还是不想因为焦点在 EditText 上导致显示虚拟键盘?我觉得 EditText 在启动时获取到了焦点不是一个问题,但用户没有主动请求 EditText 的焦点的情况下却导致虚拟键盘的打开,这肯定是一个问题。
设置 android:windowSoftInputMode="stateHidden"
可以在进入 Activity 后隐藏虚拟键盘,或者 设置 android:windowSoftInputMode="stateUnchanged"
让虚拟键盘的状态不改变(也即是说,当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。)。
android:windowSoftInputMode属性详解:
activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【一】当有焦点产生时,软键盘是隐藏还是显示
【二】是否减少活动主窗口大小以便腾出空间放软键盘
它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:
<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >
在这设置的值(除"stateUnspecified"和"adjustUnspecified"以外)将覆盖在主题中设置的值
各值的含义:
【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【3】stateHidden:用户选择activity时,软键盘总是被隐藏
【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【5】stateVisible:软键盘通常是可见的
【6】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【7】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【8】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【9】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分