Подтвердить что ты не робот

Пользовательский SearchView полностью доступен для Android в Android

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

a busy cat

Сейчас он находится в этом состоянии:

a busy cat

Вот мой код:

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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