Пользовательский SearchView весь кликабельный в android

У меня есть виджет SearchView в моем приложении, и я хочу задать несколько вопросов о его настройке. Прежде всего, вы можете начать поиск только нажав на значок поиска, есть ли способ сделать весь SearchView кликабельным? Кроме того, есть ли способ сделать SearchView похожим на это при нажатии?

занятая кошка http://i41.tinypic.com/rr2ow4.png ![][1]

теперь он находится в этом состоянии:

занят кот http://i41.tinypic.com/11jlu2p.png ![][1]

вот мой код:

    citySearch = (SearchView) findViewById(R.id.city_search_bar);
    citySearch.setBackgroundResource(R.drawable.search_background);
    citySearch.setOnSearchClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            citySearch.setIconifiedByDefault(true);
            //citySearch.setIconified(true);
        }

    });
    citySearch.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String text) {

            ((Filterable) cityListView.getAdapter()).getFilter().filter(text);

            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String text) {

            return false;
        }

    });

    try
    {
        Field searchField = SearchView.class.getDeclaredField("mSearchButton");
        searchField.setAccessible(true);
        ImageView searchBtn = (ImageView)searchField.get(citySearch);
        searchBtn.setImageResource(R.drawable.search_icon);
        searchBtn.setScaleType(ScaleType.FIT_CENTER);
        searchPlate.setBackgroundResource(R.drawable.search_background);
    }
    catch (NoSuchFieldException e)
    {
        Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
    }
    catch (IllegalAccessException e)
    {
        Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
    }

4 ответов


по умолчанию SearchView 'iconified', который отображается как значок увеличительного стекла и только если пользователь нажимает на значок, поле редактирования расширяется.

чтобы пользователь мог щелкнуть в любом месте SearchView и развернуть поле ввода. Нам просто нужно добавить прослушиватель кликов и вызвать setIconified(false), когда пользователь нажимает.

searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchView.setIconified(false);
        }
    });

еще один простой способ сделать это путем установки onActionViewExpanded().

searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        searchView.onActionViewExpanded();
    }
});

чтобы разрешить запись при нажатии на весь компонент, я бы рекомендовал вам объявить iconifiedByDefault="false" на xml.

<SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"/>

по умолчанию SearchView является 'свернутые'. Поэтому вы должны использовать этот код в java:

SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchView.setIconified(false);
    }
});

или используйте это в xml:

<SearchView
        android:id="@+id/searchView"
        android:iconifiedByDefault="false" />

это 2 стороны правильно, но разные значки.