如何在Android中防止活动启动时EditText获取焦点?

3161

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

  1. EditText
  2. ListView

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

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

没有成功。我该如何说服EditTextActivity启动时不选择自己?

54个回答

3
<EditText
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:id="@+id/etComments"
    android:hint="Comments.."
    android:textSize="14dp"
    android:focusable="false"
    android:textStyle="italic"/>

3

ListView 中的 EditText 不起作用。使用自动生成行的 TableLayoutEditText 更为适合。


3

您可以使用请求焦点并使用键盘隐藏代码来指定其他小部件的焦点。


2

xml文件中,从你的EditText中移除<requestFocus />标签。

<EditText
       android:id="@+id/emailField"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:inputType="textEmailAddress">
    
       //`<requestFocus />` /* <-- remove this tags */
    </EditText>

1
我只是在我的父级布局上使用了android:focusableInTouchMode="true",并对我有效。 - Hermandroid

2
在onCreate()函数中禁用它。
final KeyListener edtTxtMessageKeyListener = edtTxtMessage.getKeyListener();
edtTxtMessage.setCursorVisible(false);
edtTxtMessage.setKeyListener(null);

最后,在EditText的onClick()方法中启用它。
edtTxtMessage.setCursorVisible(true);
edtTxtMessage.setKeyListener(edtTxtMessageKeyListener);

但问题是当我们第一次点击时,需要点击两次才能打开屏幕键盘。

@解决方法

InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

在onClick()中也尝试这样做 :)

2

我曾经遇到过这样的问题,是由于我的选择器引起的。第一个状态是焦点状态,即使我的视图被禁用了,它仍然采用了焦点状态,因为它是第一个匹配并使用的状态。你可以像这样将第一个状态设置为禁用状态:

<selector xmlns:android="http://schemas.android.com/apk/res/android">


<item android:drawable="@drawable/text_field_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/text_field_focused" android:state_focused="true"/>
<item android:drawable="@drawable/text_field_normal"/>


2
最简单的方法是在Manifest.xml文件中的activity标签中添加android:windowSoftInputMode="stateAlwaysHidden"

2
这并不会取消文本字段的焦点,它只是隐藏了键盘。您仍然会得到一个被推出字段的提示,并且任何颜色状态选择器都将显示“focused=true”状态。 - A. Rager

2

跟着这些步骤完成工作!

android:focusable="true"
android:focusableInTouchMode="true"

重复的答案 - Ricardo A.

1
您可以设置EditText的焦点属性为禁用,这可以通过两种方式实现:
  • 您可以将可聚焦性作为一般属性禁用

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

如果该Editext位于该活动的视图堆栈顶部,例如标题,那么焦点属性默认为true,即在启动活动时具有焦点。

要禁用可聚焦性,您只需将其布尔值设置为false即可。

因此,代码如下:

android:focusable="false"

要禁用它的“FocusableInTouchMode”,您只需将其布尔值设置为false即可。代码如下:
android:focusable="false"

你只需要找到想要应用更改的Textview,并在XML文件中添加相应的代码片段即可。
或者,你可以在布局编辑器中点击Textview,然后找到侧栏显示该Textview的所有xml属性,然后简单地向下滚动到声明“Focusable”和“FocusableInTouchMode”的位置,并将它们设置为true或false。

1
如果你想在活动开始时隐藏键盘,请提及。
android:windowSoftInputMode="stateHidden"

将该活动添加到清单文件中,问题得以解决。

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接