А теперь внутрь элемента Toolbar мы добавим необходимые элементы для функциональности поиска: EditText и Button. Toolbar является ViewGroup, поэтому в него можно помещать элементы, как и в любой другой контейнер. Единственный нюанс — Toolbar располагает элементы один над одним по умолчанию (как FrameLayout).
android:maxLines="1" — означает, что EditText не будет поддерживать многострочный режим и весь текст будет располагаться в одну строку.
android:imeOptions="actionSearch" и android:inputType="text" добавляют в клавиатуру пользователя кнопку поиска, нажатие по которой в дальнейшем мы сможем обработать.
android:background="@null" убирает нижнюю линию, которая по умолчанию присутствует в EditText.
Также некоторые изменения претерпела кнопка поиска. Вот как выглядит наша кнопка со всеми атрибутами:
В качестве android:background мы использовали сгенерированную векторную иконку search.
Также мы установили атрибутам значение minWidth, minHeight0dp, т.к. по умолчанию кнопки в Android системе имеют минимальную ширину и высоту. В данном случае нам это мешает, поэтому мы переопределяем эти значения.
Обработка событий Toolbar-компонента
Теперь мы можем работать с элементами тулбара как и с любыми другими элементами экрана. Давайте добавим Toolbar и его вложенные элементы в Activity.
Ничего необычного. Только вложенные элементы мы ищем используя toolbar.findViewById(). Это сделано для оптимизации поиска элементов. Поиск будет проходить только внутри Toolbar элемента, а не во всех элементах CustomToolbarActivity.
Теперь давайте добавим слушателей на нажатие кнопки поиска и на нажатие кнопки search внутри клавиатуры:
CustomToolbarActivity.java
publicclassCustomToolbarActivityextendsAppCompatActivity {
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
// остальной код выше не изменился
searchButton.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(Viewv) {
Toast.makeText(v.getContext(), R.string.search_hint, Toast.LENGTH_SHORT).show();
}
});
queryEditText.setOnEditorActionListener(newTextView.OnEditorActionListener() {
@OverridepublicbooleanonEditorAction(TextViewv, intactionId, KeyEventevent) {
if (actionId ==EditorInfo.IME_ACTION_SEARCH) {
Toast.makeText(v.getContext(), R.string.search_hint, Toast.LENGTH_SHORT).show();
returntrue;
}
returnfalse;
}
});
}
}
Если вы сейчас запустите приложение, то увидите, что стало гораздо лучше:
.
В результате данного урока мы:
отработали навыки работы с Toolbar;
узнали, каким образом наполнить Toolbar пользовательскими элементами.
Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для
продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.
Структура урока:
Стилизация элемента Toolbar
В этом уроке нам необходимо сделать тулбар такого вида:
Добавление Toolbar-компонента
Здесь стандартным меню не обойтись, т.к. здесь уже присутствует более сложная логика пользовательского интерфейса — элемент поиска.
Сперва, как и в предыдущем уроке про тулбар, добавим элемент
Toolbar
в layout файл Activity:custom_toolbar_activity_layout.xml
А теперь внутрь элемента
Toolbar
мы добавим необходимые элементы для функциональности поиска:EditText
иButton
.Toolbar
являетсяViewGroup
, поэтому в него можно помещать элементы, как и в любой другой контейнер. Единственный нюанс —Toolbar
располагает элементы один над одним по умолчанию (какFrameLayout
).custom_toolbar_activity_layout.xml
Запустим приложение:
Видим, что всё отобразилось, но визуально выглядит не очень.
Стилизация Toolbar-компонента
Нам надо поменять стили у наших элементов
EditText
иButton
.Давайте усовершенствуем наш
EditText
:custom_toolbar_activity_layout.xml
Объясним новые атрибуты:
android:maxLines="1"
— означает, чтоEditText
не будет поддерживать многострочный режим и весь текст будет располагаться в одну строку.android:imeOptions="actionSearch"
иandroid:inputType="text"
добавляют в клавиатуру пользователя кнопку поиска, нажатие по которой в дальнейшем мы сможем обработать.android:background="@null"
убирает нижнюю линию, которая по умолчанию присутствует вEditText
.Также некоторые изменения претерпела кнопка поиска. Вот как выглядит наша кнопка со всеми атрибутами:
custom_toolbar_activity_layout.xml
В качестве
android:background
мы использовали сгенерированную векторную иконкуsearch
.Также мы установили атрибутам значение
minWidth
,minHeight
0dp
, т.к. по умолчанию кнопки вAndroid
системе имеют минимальную ширину и высоту. В данном случае нам это мешает, поэтому мы переопределяем эти значения.Обработка событий Toolbar-компонента
Теперь мы можем работать с элементами тулбара как и с любыми другими элементами экрана. Давайте добавим
Toolbar
и его вложенные элементы в Activity.CustomToolbarActivity.java
Ничего необычного. Только вложенные элементы мы ищем используя
toolbar.findViewById()
. Это сделано для оптимизации поиска элементов. Поиск будет проходить только внутриToolbar
элемента, а не во всех элементахCustomToolbarActivity
.Теперь давайте добавим слушателей на нажатие кнопки поиска и на нажатие кнопки
search
внутри клавиатуры:CustomToolbarActivity.java
Если вы сейчас запустите приложение, то увидите, что стало гораздо лучше:
В результате данного урока мы:
Toolbar
;Toolbar
пользовательскими элементами.