当活动在 Android 中启动时,如何阻止 EditText 获得焦点?

新手上路,请多包涵

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

  1. EditText
  2. ListView

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

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

没运气。我如何说服 EditTextActivity 启动时不选择自己?

原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

Adding the tags android:focusableInTouchMode="true" and android:focusable="true" to the parent layout (eg LinearLayout or ConstraintLayout ) like in the following example, will fix the problem .

 <!-- 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"/>

原文由 Morgan Christiansson 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以将 Editext 设置为禁用焦点属性,现在这可以通过两种方式应用:

  • 您可以禁用可聚焦作为一般属性

  • 或者您可以禁用 FocusableInTouchMode 作为触摸模式下特定视图的属性(触摸屏)

默认情况下,如果 Editext 位于该活动中的视图堆栈的顶部,则 focusable 属性为 true,例如,标题,它将在活动启动时成为焦点。

要禁用 Focusable,您只需将其布尔值设置为 false。

所以那将是:

 android:focusable="false"

要禁用它 FocusableInTouchMode,您只需将其布尔值设置为 false。所以那将是:

 android:focusable="false"

您只需找到要对其应用更改的 Textview 并将相应的代码段添加到 XML 文件中的 xml 规范中。

或者,您可以单击布局编辑器中的 Textview 并找到显示该 Textview 的所有 xml 属性的侧边栏,然后只需向下滚动到声明“Focusable”和“FocusableInTouchMode”的位置并检查它们是真还是假。

原文由 DeveloperForce 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题