如何在Android中防止活动启动时EditText获取焦点?

3161

我在Android中有一个Activity,其中包含两个元素:

  1. EditText
  2. ListView

当我的Activity启动时,EditText立即具有输入焦点(闪烁光标)。我不希望任何控件在启动时具有输入焦点。我尝试过:

EditText.setSelected(false);
EditText.setFocusable(false);

没有成功。我该如何说服EditTextActivity启动时不选择自己?

54个回答

53

这些解决方案都对我没用。我修复自动对焦的方法是:

<activity android:name=".android.InviteFriendsActivity"
 android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>

2
在 Android Manifest 中的任何活动上添加 android:windowSoftInputMode="adjustPan"。 - rallat

50

简单解决方案: 在AndroidManifest文件中的Activity标签中使用

android:windowSoftInputMode="stateAlwaysHidden"

7
严格来说,这并没有解决问题。OP说:“我不想让任何控件在启动时拥有输入焦点。”你的解决方案只是隐藏了键盘,细微的差别。 - katzenhut
@katzenhut 是的,这正是我对这个答案的问题所在。专注于我的EditText会打开一个PlaceAutoComplete活动,因此这个答案是不完整的。 - Zach
如果问题是:“如何确保我的活动永远不显示键盘”,那么这个答案就会完整。但实际上并不是这样的问题。 - Martin Marconcini

44
您可以将布局的第一个TextView"focusable""focusable in touch mode"属性设置为true。这样,当活动启动时,TextView将获得焦点,但由于其特性,您将看不到屏幕上的任何焦点,并且当然不会显示键盘...

42
以下是我在 Manifest 中使用的方法。请写入,
<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>

2
这并不会取消焦点文本框,只是隐藏了键盘。您仍然会得到被推出字段的提示,并且任何颜色状态选择器都将显示“focused=true”状态。 - A. Rager

38

我需要在程序中明确地聚焦于所有字段。我只需将以下两个语句添加到我的主布局定义中。

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

就这样解决了。立刻解决了我的问题。感谢Silver指导我走上了正确的方向。


33
Manifest.xml 文件中的 activity 标签中添加 android:windowSoftInputMode="stateAlwaysHidden"
来源: 链接

1
这并不取消文本字段的焦点,它只是隐藏了键盘。您仍然会得到一个被推出字段的提示,并且任何颜色状态选择器都将显示“focused = true”状态。 - A. Rager

29

如果您在活动中有另一个视图,例如 ListView,您也可以执行以下操作:

ListView.requestFocus(); 

在你的 onResume() 中可以使用以下代码将焦点从 editText 转移到另一个控件。

我知道这个问题已经有答案了,但我想提供一个对我有效的替代方案 :)


28

在你的第一个可编辑字段之前尝试这个:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();

24

onCreate方法中添加以下内容:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

2
这并不会取消文本字段的焦点,它只是隐藏了键盘。您仍然会得到一个被推出字段的提示,并且任何颜色状态选择器都将显示“focused=true”状态。 - A. Rager

21

在您的父布局中写入此行...

 android:focusableInTouchMode="true"

重复的答案 - Ricardo A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接