需要阻止我的AutoCompleteTextView在活动开始时获得焦点

时间:2015-07-13 19:59:49

标签: android focus autocompletetextview

我的XML文件中有一个AutoCompleteTextView:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.android.aashima.premiumpoint.PremiumPoint">

        <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/searchByName"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:padding="10dp"
        android:background="#ddd"
        android:hint="Search By Name"
        android:textColorHint="#fff"
        android:gravity="center"
        android:layout_alignTop="@+id/searchImageButton"
        android:layout_alignBottom="@+id/searchImageButton"
        android:layout_toLeftOf="@+id/searchImageButton"
        android:textColor="#fff"
        android:completionThreshold="1"
        android:imeOptions="actionDone"
        android:dropDownWidth="fill_parent"/>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/searchImageButton"
        android:src="@drawable/search40"
        android:layout_alignParentRight="true"
        android:padding="2dp"
        android:background="@color/material_blue_grey_950"/>

    </RelativeLayout>

我的活动开始时,我不希望它获得焦点。

我尝试将以下内容提供给父版面:

    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true"

在我的AutoCompleteTextView上方给出一个虚拟项目:

    <!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
    <LinearLayout
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_width="0px"
        android:layout_height="0px"/>

并设置:

        android:nextFocusUp="@id/searchByName"
        android:nextFocusLeft="@id/searchByName"

到AutoCompleteTextView。

在搜索时,我发现类似的结果:

android:windowSoftInputMode="stateHidden"
android:windowSoftInputMode="stateUnchanged"

但我想要的是防止它获得焦点而不是隐藏键盘出现。

我尝试过很多没有运气的替代方案。我在这里做错了吗? 提前谢谢。

编辑: 还尝试了:

clearFocus();
requestFocus();

1 个答案:

答案 0 :(得分:3)

尝试合并两种方法,如下所示:

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<AutoCompleteTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/searchByName"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:padding="10dp"
    android:background="#ddd"
    android:hint="Search By Name"
    android:textColorHint="#fff"
    android:gravity="center"
    android:layout_alignTop="@+id/searchImageButton"
    android:layout_alignBottom="@+id/searchImageButton"
    android:layout_toLeftOf="@+id/searchImageButton"
    android:textColor="#fff"
    android:completionThreshold="1"
    android:imeOptions="actionDone"
    android:dropDownWidth="fill_parent"
    android:nextFocusUp="@id/searchByName"
    android:nextFocusLeft="@id/searchByName"/>

现在,将虚拟View和AutoCompleteTextView带到您的java代码并使用:

 dummy.requestFocus();
     search.clearFocus();

,反之亦然。