В настоящее время я нахожусь в процессе изучения того, как преобразовать мое приложение в дизайн материалов, и сейчас я немного застрял. Мне добавили панель инструментов, и я переместил свой навигационный ящик на весь контент.
Сейчас я пытаюсь создать расширяемый поиск, похожий на тот, который приведен в руководстве по материалам :
это то, что у меня есть сейчас, и я не могу понять, как сделать это, как указано выше:
Это мое меню xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="Search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
Это работает, я получаю пункт меню, который расширяется до SearchView, и я могу отфильтровать свой список в порядке. Это не похоже на первую картинку.
Я пытался использовать MenuItemCompat.setOnActionExpandListener()
на R.id.action_search
так что я мог бы изменить значок домой к задней стрелки, но это не похоже на работу. Ничто не срабатывает в слушателе. Даже если бы это сработало, оно все равно не было бы очень близко к 1-му изображению.
Как создать SearchView на новой панели инструментов appcompat, которая выглядит как руководство по материалам?
Ответы:
На самом деле это довольно легко сделать, если вы используете
android.support.v7
библиотеку.Шаг 1
Объявить пункт меню
Шаг 2
Расширьте
AppCompatActivity
и вonCreateOptionsMenu
настройках SearchView.результат
источник
navigate-back
кнопка, а значок поиска, и его расстояние от левого края экрана не такое, как междуX
значком и правым краем экрана (у меня нет переполнение действий). Выложил вопрос здесь , можете посмотреть?searchView.setIconifiedByDefault(false);
вonCreateOptionsMenu
функцию.app:showAsAction="always"
а НЕapp:showAsAction="ifRoom|collapseActionView"
После недели недоумения по этому поводу. Я думаю, что я понял это.
Сейчас я использую только EditText внутри панели инструментов. Это было предложено мне oj88 на Reddit.
Теперь у меня есть это:
сначала внутри onCreate () моей деятельности я добавил EditText с видом изображения с правой стороны на панель инструментов следующим образом:
Это сработало, но затем я столкнулся с проблемой, когда onOptionsItemSelected () не вызывался, когда я нажимал на кнопку домой. Поэтому я не смог отменить поиск, нажав кнопку домой. Я пробовал несколько разных способов регистрации прослушивателя щелчка на кнопке «Домой», но они не работали.
В конце концов я обнаружил, что ActionBarDrawerToggle, который у меня был, мешал вещам, поэтому я удалил его. Затем этот слушатель начал работать:
Теперь я могу отменить поиск с помощью кнопки «Домой», но пока не могу нажать кнопку «Назад», чтобы отменить поиск. Поэтому я добавил это в onBackPressed ():
Я создал этот метод для переключения видимости EditText и пункта меню:
Мне нужен был способ переключения кнопки «Домой» на панели инструментов между значком ящика и кнопкой «Назад». В конце концов я нашел метод ниже в этом ответе . Хотя я немного изменил его, чтобы придать мне больше смысла:
Это работает, мне удалось выявить несколько ошибок, которые я обнаружил по пути. Я не думаю, что это 100%, но это работает достаточно хорошо для меня.
РЕДАКТИРОВАТЬ: Если вы хотите добавить представление поиска в XML вместо Java, сделайте следующее:
toolbar.xml:
onCreate () вашей активности:
источник
Я знаю, что это старая ветка, но я все еще публикую библиотеку, которую только что создал. Надеюсь, это может кому-то помочь.
https://github.com/Shahroz16/material-searchview
источник
Первый скриншот в вашем вопросе не является публичным виджетом. Поддержка SearchView (
android.support.v7.widget.SearchView
) имитирует Android 5.0 Lollipop's SearchView (android.widget.SearchView
). Ваш второй снимок экрана используется другими приложениями, созданными с использованием материалов, такими как Google Play.SearchView на вашем первом снимке экрана используется в Drive, YouTube и других закрытых приложениях Google Apps. К счастью, он также используется в Android 5.0 Dialer . Вы можете попытаться сделать бэкпорт для представления, но он использует некоторые API 5.0.
Классы, которые вы захотите посмотреть:
SearchEditTextLayout , AnimUtils и DialtactsActivity, чтобы понять, как использовать представление. Вам также понадобятся ресурсы из ContactsCommon .
Удачи.
источник
Вот моя попытка сделать это:
Шаг 1. Создайте стиль с именем
SearchViewStyle
Шаг 2. Создайте макет с именем
simple_search_view_item.xml
Шаг 3. Создайте пункт меню для этого вида поиска
Шаг 4: надуть меню
Результат:
Единственное, что я не смог сделать, это заставить его заполнить всю ширину
Toolbar
. Если бы кто-то мог помочь мне сделать это, это было бы прекрасно.источник
I wasn't able to do was to make it fill the entire width
какую версию библиотеки поддержки вы используете? Попробуйте установитьapp:contentInsetStartWithNavigation="0dp"
для своей панели инструментов.Чтобы добиться желаемого вида SearchView, вы можете использовать стили.
Во-первых, вам нужно создать
style
для своего SearchView, который должен выглядеть примерно так:Весь список атрибутов вы можете найти в этой статье, в разделе «SearchView».
Во-вторых, вам нужно создать
style
для себяToolbar
, который используется как ActionBar:И, наконец, вам нужно обновить атрибут темы панели инструментов следующим образом:
Результат:
ПРИМЕЧАНИЕ. Вам необходимо
Toolbar
напрямую изменить атрибут темы. Если вы просто обновите свой основнойsearchViewStyle
атрибут темы, это не повлияет на вашToolbar
.источник
navigate-back
(стрелка назад) иcancel
(x) или они были добавлены автоматически?navigate-back
всегда отображается,clear
отображается только после того, как вы написали какой-то поисковый запрос.Другой способ добиться желаемого эффекта - использовать эту библиотеку просмотра материалов . Он автоматически обрабатывает историю поиска и предоставляет возможность поиска для просмотра.
Пример: (он показан на португальском, но также работает на английском и итальянском языках).
Настроить
Прежде чем вы сможете использовать эту библиотеку, вы должны реализовать класс с именем
MsvAuthority
внутриbr.com.mauker
пакета, в вашем модуле приложения, и он должен иметь открытую статическую переменную String с именемCONTENT_AUTHORITY
. Дайте ему желаемое значение и не забудьте добавить то же имя в файл манифеста. Библиотека будет использовать этот файл для установки полномочий контент-провайдера.Пример:
MsvAuthority.java
AndroidManifest.xml
использование
Чтобы использовать его, добавьте зависимость:
А потом, по вашему
Activity
файл макета добавьте следующее:После этого вам просто нужно получить
MaterialSearchView
ссылку с помощьюgetViewById()
и открыть или закрыть ее с помощьюMaterialSearchView#openSearch()
иMaterialSearchView#closeSearch()
.PS: можно открывать и закрывать вид не только из
Toolbar
. Вы можете использоватьopenSearch()
метод в основном из любогоButton
, такого как кнопка с плавающим действием.Вы также можете закрыть вид с помощью кнопки назад, выполнив следующие действия:
Для получения дополнительной информации о том, как использовать lib, проверьте страницу github .
источник
Следующее создаст SearchView, идентичный тому, что в Gmail, и добавит его на заданную панель инструментов. Вам просто нужно реализовать свой собственный метод «ViewUtil.convertDpToPixel».
источник