停止EditText在Activity启动时获得焦点
我在Android中有一个Activity
,有两个元素:
EditText
ListView
当我的Activity
开始时, EditText
立即有输入焦点(闪烁的光标)。 我不想让任何控件在启动时拥有输入焦点。 我试过了:
EditText.setSelected(false);
没有运气。 我如何说服EditText
在Activity
启动时不选择自己?
来自Luc和Mark的优秀答案不过缺少一个好的代码示例:
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:nextFocusUp="@id/autotext"
android:nextFocusLeft="@id/autotext"/>
实际的问题是你根本不希望它有什么焦点? 或者你不希望它显示虚拟键盘作为聚焦EditText
的结果? 我真的没有看到EditText
有一个关注开始的问题,但是当用户没有明确请求关注EditText
(并打开键盘)时,打开softInput窗口肯定是一个问题。
如果是虚拟键盘的问题,请参阅AndroidManifest.xml
<activity>元素文档。
android:windowSoftInputMode="stateHidden"
- 进入活动时始终隐藏它。
或android:windowSoftInputMode="stateUnchanged"
- 不要更改它(例如,如果它尚未显示,但如果它在进入活动时打开,请将其打开)不显示。
存在更简单的解决方案。 在父级布局中设置这些属性:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
现在,当活动开始时,这个主布局将默认为焦点。
此外,我们可以在运行时从子视图中删除焦点(例如,在完成子编辑之后),方法是将焦点重新放在主布局上,如下所示:
findViewById(R.id.mainLayout).requestFocus();
Guillaume Perrot的好评 :
android:descendantFocusability="beforeDescendants"
似乎是默认值(整数值为0)。 它只是通过添加android:focusableInTouchMode="true"
。
真的,我们可以看到beforeDescendants
在ViewGroup.initViewGroup()
方法(Android 2.2.2)中设置为默认值。 但不等于0. ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
感谢Guillaume。
链接地址: http://www.djcxy.com/p/85505.html