我在 Android 中有一个 Activity,有两个元素:
编辑文本列表视图
当我的 Activity 启动时,EditText 立即具有输入焦点(闪烁的光标)。我不希望任何控件在启动时具有输入焦点。我试过了:
EditText.setSelected(false);
EditText.setFocusable(false);
没运气。如何说服 EditText 在 Activity 启动时不选择自己?
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
如下例所示,将标签 android:focusableInTouchMode=“true” 和 android:focusable=“true” 添加到父布局(例如 LinearLayout 或 ConstraintLayout)将解决问题。
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
将 parent 布局设置为 android:focusableInTouchMode="true" 怎么样!
@MuhammadBabar android:focusableInTouchMode="true" 在模拟器中创建缩放视图
在我的情况下,即使添加到文本视图也可以
如果允许我多次投票赞成问题,那么我将两次投票赞成这个答案。谢谢兄弟
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
实际问题是您根本不希望它有焦点吗?或者您不希望它因为专注于 EditText 而显示虚拟键盘?我真的没有看到 EditText 关注开始有问题,但是当用户没有明确请求关注 EditText(并打开键盘)时,打开 softInput 窗口绝对是个问题因此)。
如果是虚拟键盘的问题,请参阅 AndroidManifest.xml element 文档。
android:windowSoftInputMode=“stateHidden” - 进入活动时始终隐藏它。
或 android:windowSoftInputMode=“stateUnchanged” - 不要更改它(例如,如果它尚未显示,则不要显示它,但如果它在进入活动时处于打开状态,则保持打开状态)。
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
但光标仍位于布局中的第一个 EditText 中 - 即使未显示键盘
@Anderson:答案没有暗示它会阻止 EditText 获得焦点。它实际上清楚地表明这是防止软件键盘输入法在焦点上自动打开的方式;因为更有可能更大的担忧是软键盘意外弹出,而不是焦点本身。如果您的问题是 EditText 实际上有焦点,那么请使用其他人的答案。
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
存在一个更简单的解决方案。在您的父布局中设置这些属性:
现在,当活动启动时,这个主布局将默认获得焦点。
此外,我们可以在运行时(例如,在完成子编辑之后)将焦点从子视图中移除,方法是再次将焦点赋予主布局,如下所示:
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;
感谢纪尧姆。
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
我找到的唯一解决方案是:
创建一个LinearLayout(我不知道其他类型的布局是否可行)
设置属性 android:focusable=“true” 和 android:focusableInTouchMode=“true”
并且 EditText 在启动活动后不会获得焦点
谢谢,也适用于其他布局。在约束布局上测试。
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。
问题似乎来自我只能在布局的 XML form 中看到的属性。
确保在 EditText XML 标记内的声明末尾删除此行:
那应该给出类似的东西:
// /* <-- without this line */
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
使用其他海报提供的信息,我使用了以下解决方案:
在布局 XML
在 onCreate()
private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
//get references to UI components
mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}
最后,在 onResume()
@Override
protected void onResume() {
super.onResume();
//do not give the editbox focus automatically when activity starts
mAutoCompleteTextView.clearFocus();
mLinearLayout.requestFocus();
}
这实际上是唯一对我有用的答案。添加 android:focusable="true" android:focusableInTouchMode="true" 会阻止 EditTexts 在某些设备上获得焦点,但在某些设备上它仍然不起作用。我一直在寻找解决方案很长时间,并且效果很好。非常感谢。
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
尝试 clearFocus() 而不是 setSelected(false)。 Android中的每个视图都具有可聚焦性和可选择性,我认为您只想清除焦点。
这听起来很有希望,但是应该在 Activity 生命周期的什么时候调用它?如果我在 onCreate() 中调用它,EditText 仍然具有焦点。应该在 onResume() 或其他位置调用它吗?谢谢!
我将接受的答案与这个答案结合起来。我在 Activity 的 onResume 中调用了 myEditText.clearFocus(); myDummyLinearLayout.requestFocus();。这确保了 EditText 在手机旋转时不会保持焦点。
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
以下将在创建时停止edittext获得焦点,但在您触摸它们时抓住它。
因此,您在 xml 中将 focusable 设置为 false,但关键在 java 中,您在其中添加以下侦听器:
etBonus.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.setFocusable(true);
v.setFocusableInTouchMode(true);
return false;
}
});
因为您正在返回 false,即不使用事件,所以聚焦行为将像往常一样进行。
但这在未来永远不会获得关注,如何只为初始(活动开始)停止关注?
onTouchListener 在其他触摸动作之前被调用。因此,通过启用可聚焦触摸,标准焦点发生在第一次触摸时。键盘会出现和一切。
好的!这一个有效(尽管它似乎使该领域脱离了焦点处理 TAB 序列)。这可以在一个地方完成,无需布局 XML 部分:if (Build.VERSION.SDK_INT <= 27) {et.setFocusable(false); et.setOnTouchListener(...);}
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
我已经单独尝试了几个答案,但重点仍然在 EditText 上。我只能通过同时使用以下两个解决方案来解决它。
(来自 Silver https://stackoverflow.com/a/8639921/15695 的参考)
并删除
在 EditText
(来自 floydaddict https://stackoverflow.com/a/9681809 的参考)
除了上述内容之外,我还必须添加 edittext.clearFocus() 才能使其正常工作:)
huntsbot.com – 高效赚钱,自由工作
迟到但最简单的答案,只需将其添加到 XML 的父布局中。
android:focusable="true"
android:focusableInTouchMode="true"
对你有帮助就点个赞吧!快乐编码:)
非常适合我。还有一点需要注意的是,不要将这些行添加到滚动视图中。它在滚动视图中不起作用。但与线性布局完美配合。
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
这些解决方案都不适合我。我修复自动对焦的方法是:
android:windowSoftInputMode="adjustPan" 在 Android 清单中的任何活动上
原文链接:https://www.huntsbot.com/qa/XW79/how-to-stop-edittext-from-gaining-focus-when-an-activity-starts-in-android?lang=zh_CN&from=csdn
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。