Пользовательский поискПосмотреть весь кликабельный в Android

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

деловой кот

Сейчас в таком состоянии:

деловой кот

Вот мой код:

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

person Anhayt Ananun    schedule 16.07.2013    source источник
comment
Хорошо, первая проблема была решена с помощью setOnClickListener от citySearch.   -  person Anhayt Ananun    schedule 16.07.2013
comment
Вы должны ответить на этот вопрос своим комментарием... это решило мою проблему   -  person coder    schedule 11.11.2014
comment
@AnhaytAnanun Вы уже решили эти проблемы? Если да, то какое решение? Можете ли вы поделиться решением... Это может помочь нам тоже   -  person Muralidharan Kathiresan    schedule 27.05.2015
comment
@AnhaytAnanun отметьте ответ галочкой. Верно.   -  person the_prole    schedule 27.10.2016


Ответы (4)


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

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

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

По умолчанию 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 способа верны, но отличаются отображением значков.

person roghayeh hosseini    schedule 05.09.2018

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

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

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

<SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"/>
person jordivilagut    schedule 12.01.2018
comment
Это ответ, который я искал. Мне просто нужно было добавить android:focusableInTouchMode="true" в макет, чтобы избавиться от первоначального фокуса на Searchview. - person Petr Kramolis; 24.04.2018