Android - 使整个搜索栏可点击

时间:2015-05-26 10:18:22

标签: android android-layout android-fragments searchview

我在片段中使用search-view元素来实现搜索功能。

<SearchView
    android:id="@+id/search_bar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="7dp"
    android:layout_marginLeft="7dp"
    android:layout_marginRight="7dp"
    android:layout_marginBottom="7dp"
    android:background="@color/white" />

enter image description here

问题是只有搜索图标可点击搜索栏中的其他区域无法点击,当我点击图标时我才能搜索到。

enter image description here

您能否帮我点一下整个搜索区域。

enter image description here

12 个答案:

答案 0 :(得分:47)

这可以通过在OnView of SearchView上将Iconified设置为false来完成。

searchBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchBar.setIconified(false);
    }
});

参考:Eric Lui's answer

希望它会有所帮助。

答案 1 :(得分:12)

search_bar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        search_bar.onActionViewExpanded();
    }
});

答案 2 :(得分:12)

诀窍并不是让整个区域可以点击,而是扩展它然后隐藏键盘。

首先,您在XML中的布局很好,保留原样,在Java中,您希望拥有以下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    //Define your Searchview
    SearchView searchView = (SearchView) findViewById(R.id.search_bar);

    //Turn iconified to false:
    searchView.setIconified(false);
    //The above line will expand it to fit the area as well as throw up the keyboard

    //To remove the keyboard, but make sure you keep the expanded version:
    searchView.clearFocus();
}

这实现了它将键盘扩展到区域的整个长度,它聚焦于它,允许整个区域可点击,然后它移除键盘,使其看起来像用户一样单击该字段并调出键盘。

应该完成你想要的。

-Sil

答案 3 :(得分:6)

可点击的意思是什么?触发搜索操作或只是使编辑区域集中?如果是第一个,您可以将图标设为clickable = false。并使整个布局可以点击并实现一个事件监听器。

<SearchView
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:click="onClick"
android:layout_marginTop="7dp"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:layout_marginBottom="7dp"
android:background="@color/white" />

onClick方法应为

public void onClick(View v) {
   InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
    im.showSoftInput(editText, 0);
}

答案 4 :(得分:5)

  

将此内容添加到您将保留的xml android:iconifiedByDefault="false"中   打开你的搜索查看。

     

并清除它,将clearfocus添加到您的searchview对象。

答案 5 :(得分:2)

searchView.setIconified(false);

答案 6 :(得分:1)

在您的Java文件中编写以下代码行:

SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setQueryHint("Enter your address");
searchView.setIconified(false);
searchView.clearFocus();

此后,别忘了在android:focusable="true"标签内的XML文件中写入SearchView

例如:

<SearchView 
android:id="@+id/searchView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:focusable="true" />

答案 7 :(得分:1)

使用此

searchView.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            searchView.onActionViewExpanded();
            OR
            searchView.setIconified(false);
        }
    });

    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            if(!b)
            {
                if(searchView.getQuery().toString().length() < 1)
                {
                    searchView.setIconified(true); //close the search editor and make search icon again
                    OR
                    searchView.onActionViewCollapsed();
                }

                searchView.clearFocus();

            }
        }
    });

答案 8 :(得分:0)

对于最新版本的android- 试试:

app:iconifiedByDefault="false"

示例-

<android.support.v7.widget.SearchView
android:id="@+id/source_location_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="15dp"
android:layout_marginRight="20dp"
app:iconifiedByDefault="false"
app:queryHint="Your hint text" />

答案 9 :(得分:0)

使用代码:

private void initSearchView(View layout) {

    // Locate the EditText in listview_main.xml
    searchInput = (SearchView) layout.findViewById(R.id.search);
    //searchInput.onActionViewExpanded();//force show keyboard at start

    //==>region to enable search after click in input-text(not only at magnifier icon)
    searchInput.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchInput.onActionViewExpanded();
        }
    });

    searchInput.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean b) {
            if (!b) {
                if (searchInput.getQuery().toString().length() < 1) {
                    searchInput.setIconified(true); 
                }

                searchInput.clearFocus();

            }
        }
    });
    //endregion

}

并在我的布局中:

 <androidx.appcompat.widget.SearchView
        android:id="@+id/search"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar_main"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="10dp"
        android:layout_marginBottom="2dp"
        android:background="@drawable/search_border"
        android:inputType="text"
        android:layoutDirection="ltr"
        android:searchSuggestThreshold="2"
        app:queryHint="@string/search"
        app:searchHintIcon="@null" />

答案 10 :(得分:0)

使用以下代码。

<androidx.appcompat.widget.SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/earningSearchView"
        app:queryHint="Search"
        app:iconifiedByDefault="false"
        app:queryBackground="@android:color/transparent"/>

I have created Searchview like this

答案 11 :(得分:0)

所以最近我不得不这样做,我尝试了提供的所有答案,但是每个答案都有一些狡猾的行为-例如,x关闭/擦除所有按钮只有在您单击搜索图标,否则您将可以进行编辑等。但是您只会看到x作为“全部删除”按钮。

在查看SearchView的代码时,我注意到单击mSearchButton会调用onSearchClicked()而不是建议的onActionViewExpanded(),但是前者是一个包私有函数,因此它不能直接调用。所以我想出了这个:

private val searchButton by lazy { searchView.findViewById<ImageView>(R.id.search_button) }


searchView.setOnClickListener { searchButton.callOnClick() }

这样,无论您在何处单击,都可以得到相同的行为,并且无需在xml中或以编程方式手动设置iconified属性。