Android - Make whole search bar clickable

旧巷老猫 提交于 2019-12-18 12:06:02

问题


I am using a search-view element in my fragment to implement search feature.

<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" />

The problem is only the search icon is clickable other area in the search bar is not clickable, when i click the icon only i can able to search.

Can you please help me to make the whole search area clickable.


回答1:


What is the clickable mean? trigger search action or just make the edit area focused? If it is the first, you can just make the icon clickable=false. and make the whole layout clickable and implement a event listener.

<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" />

The onClick method should be

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



回答2:


This can be simply done by setting Iconified to false on OnClick of SearchView.

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

Reference: Eric Lui's answer

Hopefully it will help.




回答3:


The trick isn't so much to make the entire area clickable as much as it is to expand it and then hide the keyboard.

First, your layout in the XML is fine, leave it as is, in your Java, you want to have the following:

@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();
}

What this accomplishes is it expands the keyboard to the entire length of the area, it focuses on it, which allows the entire area to be clickable, and then it removes the keyboard so that it looks to the user like they are able to click that field and bring up a keyboard.

Should accomplish what you are looking for.

-Sil




回答4:


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



回答5:


add this to your xml android:iconifiedByDefault="false" it will keep open your searchview.

and to clear it add clearfocus to your searchview object.




回答6:


searchView.setIconified(false);



回答7:


Use This

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:


Write the lines of code given below in your Java file:

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

After that, don't forget to write android:focusable="true" in your XML file inside SearchView tag.

For example:

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



回答9:


For latest versions of android - Try:

app:iconifiedByDefault="false"

Example -

<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" />



回答10:


in code:

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

}

and in my layout:

 <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" />


来源:https://stackoverflow.com/questions/30455723/android-make-whole-search-bar-clickable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!