我在Android中有一个Activity
,其中包含两个元素:
EditText
ListView
当我的Activity
启动时,EditText
立即具有输入焦点(闪烁光标)。我不希望任何控件在启动时具有输入焦点。我尝试过:
EditText.setSelected(false);
EditText.setFocusable(false);
没有成功。我该如何说服EditText
在Activity
启动时不选择自己?
我在Android中有一个Activity
,其中包含两个元素:
EditText
ListView
当我的Activity
启动时,EditText
立即具有输入焦点(闪烁光标)。我不希望任何控件在启动时具有输入焦点。我尝试过:
EditText.setSelected(false);
EditText.setFocusable(false);
没有成功。我该如何说服EditText
在Activity
启动时不选择自己?
这些解决方案都对我没用。我修复自动对焦的方法是:
<activity android:name=".android.InviteFriendsActivity"
android:windowSoftInputMode="adjustPan">
<intent-filter >
</intent-filter>
</activity>
简单解决方案:
在AndroidManifest
文件中的Activity
标签中使用
android:windowSoftInputMode="stateAlwaysHidden"
TextView
的"focusable"和"focusable in touch mode"属性设置为true。这样,当活动启动时,TextView
将获得焦点,但由于其特性,您将看不到屏幕上的任何焦点,并且当然不会显示键盘...Manifest
中使用的方法。请写入,<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>
我需要在程序中明确地聚焦于所有字段。我只需将以下两个语句添加到我的主布局定义中。
myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);
就这样解决了。立刻解决了我的问题。感谢Silver指导我走上了正确的方向。
如果您在活动中有另一个视图,例如 ListView
,您也可以执行以下操作:
ListView.requestFocus();
在你的 onResume()
中可以使用以下代码将焦点从 editText
转移到另一个控件。
我知道这个问题已经有答案了,但我想提供一个对我有效的替代方案 :)
在你的第一个可编辑字段之前尝试这个:
<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();
在onCreate
方法中添加以下内容:
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在您的父布局中写入此行...
android:focusableInTouchMode="true"