在 Android 应用程序中设置初始焦点
Posted
技术标签:
【中文标题】在 Android 应用程序中设置初始焦点【英文标题】:Set initial focus in an Android application 【发布时间】:2011-02-14 04:09:19 【问题描述】:在我的 android 应用程序中,它会自动聚焦在我的布局中的第一个 Button
,并给它一个橙色轮廓。如何最好在 XML 中设置初始焦点,可以将其设置为空吗?
【问题讨论】:
【参考方案1】:你可以使用requestFocus
标签:
<Button ...>
<requestFocus />
</Button>
虽然它会自动聚焦您的一个按钮,但我觉得很奇怪,但我在任何视图中都没有观察到这种行为。
【讨论】:
是的,现在我的两个应用程序都发生了这种情况。我想我可以 requestFocus 到一个不会像 TextView 一样改变的元素上,还是不允许这样做? @stealthcopter:你能告诉我你使用的是哪个安卓版本吗?我正在使用 2.1 和 2.2,但 requestFocus 不起作用。 好吧,我在所有版本中都在使用它,但我遇到的问题似乎自行消失了,所以我没有进行太多调查。 我尝试过 XML 方法,我尝试过编程方法。然而 EditText 保持焦点。很烦人!@Someone 在某处,我尝试了以上所有方法均无济于事。我找到的修复来自 http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android 。基本上,您需要在有问题的 Button 上方创建一个不可见的布局:
<LinearLayout android:focusable="true"
android:focusableInTouchMode="true"
android:layout_
android:layout_ >
<requestFocus />
</LinearLayout>
【讨论】:
我能够专注于 AlertDialog 并且启用 focusableintouchmode 帮助我做到了。本质上,方法如下: alert.show(); alert.getButton(AlertDialog.BUTTON_POSITIVE).setFocusableInTouchMode(true);alert.getButton(AlertDialog.BUTTON_NEGATIVE).requestFocus(); 谢谢!这是唯一对我有用的解决方案。虽然我使用它略有不同;我将焦点内容放在包含EditText
的RelativeLayout
中。
对于 Android P,平台将发生以下变化:“区域为 0(宽度或高度为 0)的视图不再具有焦点。此外,活动不再隐式分配初始焦点在触摸-mode。相反,如果需要,您可以明确请求初始焦点。"【参考方案3】:
将:focusable
和:focusableInTouchMode
都设置为true 并调用requestFocus
。它成功了。
【讨论】:
是的,这是修复它的真正解决方案。谢谢安德斯【参考方案4】:我发现这对我来说效果最好。
在AndroidManifest.xml中<activity> 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)。以上是关于在 Android 应用程序中设置初始焦点的主要内容,如果未能解决你的问题,请参考以下文章