【问题标题】:Set initial focus in an Android application在 Android 应用程序中设置初始焦点
【发布时间】:2011-02-14 04:09:19
【问题描述】:

在我的 Android 应用程序中,它会自动聚焦在我的布局中的第一个 Button,并给它一个橙色轮廓。如何最好在 XML 中设置初始焦点,可以将其设置为空吗?

【问题讨论】:

    标签: android focus


    【解决方案1】:

    你可以使用requestFocus标签:

    <Button ...>
      <requestFocus />
    </Button>
    

    虽然它会自动聚焦您的一个按钮,但我觉得很奇怪,但我在任何视图中都没有观察到这种行为。

    【讨论】:

    • 是的,现在我的两个应用程序都发生了这种情况。我想我可以 requestFocus 到一个不会像 TextView 一样改变的元素上,还是不允许这样做?
    • @stealthcopter:你能告诉我你使用的是哪个安卓版本吗?我正在使用 2.1 和 2.2,但 requestFocus 不起作用。
    • 好吧,我在所有版本中都在使用它,但我遇到的问题似乎自行消失了,所以我没有进行太多调查。
    • 我尝试过 XML 方法,我尝试过编程方法。然而 EditText 保持焦点。很烦人!
    【解决方案2】:

    @Someone 在某处,我尝试了以上所有方法均无济于事。我找到的修复来自 http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android 。基本上,您需要在有问题的 Button 上方创建一个不可见的布局:

    <LinearLayout android:focusable="true"
                  android:focusableInTouchMode="true" 
                  android:layout_width="0px"
                  android:layout_height="0px" >
        <requestFocus />
    </LinearLayout>
    

    【讨论】:

    • 我能够专注于 AlertDialog 并且启用 focusableintouchmode 帮助我做到了。本质上,方法如下: alert.show(); alert.getButton(AlertDialog.BUTTON_POSITIVE).setFocusableInTouchMode(true);alert.getButton(AlertDialog.BUTTON_NEGATIVE).requestFocus();
    • 谢谢!这是唯一对我有用的解决方案。虽然我使用它略有不同;我将焦点内容放在包含EditTextRelativeLayout 中。
    • 对于 Android P,平台将发生以下变化:“区域为 0(宽度或高度为 0)的视图不再具有焦点。此外,活动不再隐式分配初始焦点在触摸-mode。相反,如果需要,您可以明确请求初始焦点。"
    【解决方案3】:

    :focusable:focusableInTouchMode 都设置为true 并调用requestFocus。它成功了。

    【讨论】:

    • 是的,这是修复它的真正解决方案。谢谢安德斯
    【解决方案4】:

    我发现这对我来说效果最好。

    在AndroidManifest.xml中&lt;activity&gt; element添加android:windowSoftInputMode="stateHidden"

    这总是在进入活动时隐藏键盘。

    【讨论】:

    • 简单干净!
    • 太棒了……这令人印象深刻!
    【解决方案5】:

    我只是将这行代码添加到onCreate()

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

    问题解决了。

    【讨论】:

      【解决方案6】:

      使用下面的代码,

      TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
      tableRow.requestFocus();
      

      应该可以。

      【讨论】:

        【解决方案7】:

        @Someone Someone 我用它来清除焦点:

        editText.clearFocus();
        

        它有帮助

        【讨论】:

          【解决方案8】:
          android:focusedByDefault="true"
          

          【讨论】:

          • 属性 focusedByDefault 仅用于 API 级别 26 及更高级别(当前最小值为 21)。
          猜你喜欢
          • 1970-01-01
          • 2014-12-19
          • 1970-01-01
          • 1970-01-01
          • 2013-03-24
          • 1970-01-01
          • 1970-01-01
          • 2011-08-14
          • 1970-01-01
          相关资源
          最近更新 更多