Урок 13. Практическое занятие. Наполнение Toolbar вложенными элементами на экране SearchUsersActivity
Нам необходимо сделать тулбар такого вида:
Здесь стандартным меню не обойдёшься, поэтому нам понадобится toolbar_search_user.xml-файл, который мы создавали во втором уроке. Сперва, как и с предыдущим тулбаром в файле activity_user_info.xml, добавим его в файл activity_search_users.xml:
Мы изменили корневой элемент с FrameLayout на LinearLayout, т.к. у нас появился второй вложенный элемент. Мы указали свойство android:orientation="vertical", чтобы элементы располагались вертикально.
А теперь просто добавим содержимое файла toolbar_search_user.xml, немного его изменив, внутрь элемента Toolbar. Toolbar является ViewGroup, поэтому в него можно помещать элементы, как и в любой другой контейнер. Единственный нюанс: Toolbar располагает элементы один над одним по умолчанию (как FrameLayout).
Единственное, что изменилось – атрибут android:layout_height="match_parent" у контейнера RelativeLayout. Т.к. нам необходимо, чтобы контейнер занимал всю высоту parent элемента (им является Toolbar).
Запустим приложение и перейдём на экран поиска пользователей:
Видим, что данные отобразились, но визуально они выглядят не очень.
Нам надо поменять стили у наших элементов EditText и Button.
android:maxLines="1" – означает, что EditText не будет поддерживать многострочный режим и весь текст будет распологаться в одну строку.
android:imeOptions="actionSearch" и android:inputType="text" добавляют в клавиатуру пользователя кнопку поиска, нажатие по которой в дальнейшем мы сможем обработать.
android:background="@null" убирает нижнюю линию, которая по умолчанию присуствует в EditText.
Также некоторые изменения претерпела кнопка поиска.
Добавление иконки шрифта Ionicons
Перед тем, как добавить кнопку, нам необходимо по аналогии со шрифтом font_awesome в проект добавить шрифт ionicons.
После этого нам нужно добавить строковый ресурс иконки поиска, которая располагается на сайте. Найти её можно используя название ion-android-search. После того, как нашли её, необходимо скопировать иконку, которая находится в блоке selectable, как показано на скрине.
После этого просто создаём новый строковый ресурс с именем ion_search и вставляем то значение, которое мы скопировали:
strings.xml
1
2
3
4
<resources><!-- Остальные элементы выше не изменились --><stringname="ion_search"></string></resources>
Также мы используем атрибут android:background="@drawable/transparent_gfx". Пользовательский интерфейс должен быть интуитивно понятен для пользователя, поэтому он должен показывать некую реакцию на действия пользователя. В данном случае при нажатии на кнопку поиска её фон должен видоизменяться, тем самым показывая отзывчивость кнопки на действия пользователя. Более подробно об этом эффекте можно узнать из отрывка курсаMaterial Design в Android. Ниже приведены файлы эффекта:
Нам нужно создать файл с названием transparent_gfx в папке drawable. Для этого кликните по папке правой кнопкой, выбрав элементы New -> Drawable resource file.
Работа с вложенными в Toolbar элементами в java коде
Теперь мы можем работать с элементами тулбара как и с любыми другими элементами экрана. Давайте добавим Toolbar и его вложенные элементы в SearchUsersActivity.
publicclassSearchUsersActivityextends AppCompatActivity {// остальные элементы выше не изменилисьprivate Toolbar toolbar;private EditText queryEditText;private Button searchButton;
@Override
protectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_users);
initRecyclerView();
toolbar = findViewById(R.id.toolbar);
queryEditText = toolbar.findViewById(R.id.query_edit_text);
searchButton = toolbar.findViewById(R.id.search_button);
searchUsers();}}
Ничего не обычного. Только вложенные элементы мы ищем используя toolbar.findViewById(). Это сделано для оптимизации поиска элементов. Поиск будет проходить только внутри Toolbar элемента, а не во всех элементах SearchUsersActivity.
Теперь давайте будем производить поиск пользователей не в методе onCreate, а добавим слушателей на нажатие кнопки поиска и на нажатие кнопки search внутри клавиатуры.
publicclassSearchUsersActivityextends AppCompatActivity {
@Override
protectedvoidonCreate(Bundle savedInstanceState){// остальной код выше не изменился
searchButton.setOnClickListener(new View.OnClickListener(){
@Override
publicvoidonClick(View v){
searchUsers();}});
queryEditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){
@Override
publicbooleanonEditorAction(TextView v,int actionId, KeyEvent event){if(actionId == EditorInfo.IME_ACTION_SEARCH){
searchUsers();returntrue;}returnfalse;}});}}
Если вы сейчас запустите приложение, то не увидите в тулбаре кнопки «Назад» в левой его части. Её мы можем добавить, используя стандартный механизм тулбара:
publicclassSearchUsersActivityextends AppCompatActivity {
@Override
protectedvoidonCreate(Bundle savedInstanceState){// остальной код выше не изменился
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);}
@Override
publicbooleanonOptionsItemSelected(MenuItem item){switch(item.getItemId()){case android.R.id.home:
onBackPressed();returntrue;}returnsuper.onOptionsItemSelected(item);}}
Таким образом, мы сообщаем Activity о необходимости отобразить кнопку «Назад». По умолчанию кнопка назад не будет работать. Мы хотим, чтобы она работала как аппаратная кнопка «Назад». Для этого мы перехватываем нажатием кнопки в тулбаре и вызываем метод ActivityonBackPressed().
Посмотрим, что у нас получилось в итоге:
Отлично, поздравляем вас!
Кстати, мы можем удалить файл toolbar_search_user.xml, т.к. он нам больше не понадобится.
Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для
продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.
Нам необходимо сделать тулбар такого вида:
Здесь стандартным меню не обойдёшься, поэтому нам понадобится
toolbar_search_user.xml
-файл, который мы создавали во втором уроке. Сперва, как и с предыдущим тулбаром в файлеactivity_user_info.xml
, добавим его в файлactivity_search_users.xml
:activity_search_users.xml
Мы изменили корневой элемент с
FrameLayout
наLinearLayout
, т.к. у нас появился второй вложенный элемент. Мы указали свойствоandroid:orientation="vertical"
, чтобы элементы располагались вертикально.А теперь просто добавим содержимое файла
toolbar_search_user.xml
, немного его изменив, внутрь элементаToolbar
.Toolbar
являетсяViewGroup
, поэтому в него можно помещать элементы, как и в любой другой контейнер. Единственный нюанс:Toolbar
располагает элементы один над одним по умолчанию (какFrameLayout
).activity_search_users.xml
Единственное, что изменилось – атрибут
android:layout_height="match_parent"
у контейнераRelativeLayout
. Т.к. нам необходимо, чтобы контейнер занимал всю высотуparent
элемента (им являетсяToolbar
).Запустим приложение и перейдём на экран поиска пользователей:
Видим, что данные отобразились, но визуально они выглядят не очень.
Нам надо поменять стили у наших элементов
EditText
иButton
.Давайте усовершенствуем наш
EditText
:Объясним некоторые атрибуты:
android:maxLines="1"
– означает, чтоEditText
не будет поддерживать многострочный режим и весь текст будет распологаться в одну строку.android:imeOptions="actionSearch"
иandroid:inputType="text"
добавляют в клавиатуру пользователя кнопку поиска, нажатие по которой в дальнейшем мы сможем обработать.android:background="@null"
убирает нижнюю линию, которая по умолчанию присуствует вEditText
.Также некоторые изменения претерпела кнопка поиска.
Добавление иконки шрифта Ionicons
Перед тем, как добавить кнопку, нам необходимо по аналогии со шрифтом
font_awesome
в проект добавить шрифтionicons
.После этого нам нужно добавить строковый ресурс иконки поиска, которая располагается на сайте. Найти её можно используя название
ion-android-search
. После того, как нашли её, необходимо скопировать иконку, которая находится в блокеselectable
, как показано на скрине.После этого просто создаём новый строковый ресурс с именем
ion_search
и вставляем то значение, которое мы скопировали:strings.xml
Видим, что иконка отобразилась корректно.
Вот как выглядит наша кнопка со всеми атрибутами:
Также мы используем атрибут
android:background="@drawable/transparent_gfx"
. Пользовательский интерфейс должен быть интуитивно понятен для пользователя, поэтому он должен показывать некую реакцию на действия пользователя. В данном случае при нажатии на кнопку поиска её фон должен видоизменяться, тем самым показывая отзывчивость кнопки на действия пользователя. Более подробно об этом эффекте можно узнать из отрывка курсаMaterial Design в Android
. Ниже приведены файлы эффекта:Нам нужно создать файл с названием
transparent_gfx
в папкеdrawable
. Для этого кликните по папке правой кнопкой, выбрав элементыNew -> Drawable resource file
.drawable/transparent_gfx.xml
:Работа с вложенными в Toolbar элементами в java коде
Теперь мы можем работать с элементами тулбара как и с любыми другими элементами экрана. Давайте добавим
Toolbar
и его вложенные элементы вSearchUsersActivity
.SearchUsersActivity.java
Ничего не обычного. Только вложенные элементы мы ищем используя
toolbar.findViewById()
. Это сделано для оптимизации поиска элементов. Поиск будет проходить только внутриToolbar
элемента, а не во всех элементахSearchUsersActivity
.Теперь давайте будем производить поиск пользователей не в методе
onCreate
, а добавим слушателей на нажатие кнопки поиска и на нажатие кнопкиsearch
внутри клавиатуры.SearchUsersActivity.java
Если вы сейчас запустите приложение, то не увидите в тулбаре кнопки «Назад» в левой его части. Её мы можем добавить, используя стандартный механизм тулбара:
SearchUsersActivity.java
Таким образом, мы сообщаем
Activity
о необходимости отобразить кнопку «Назад». По умолчанию кнопка назад не будет работать. Мы хотим, чтобы она работала как аппаратная кнопка «Назад». Для этого мы перехватываем нажатием кнопки в тулбаре и вызываем методActivity
onBackPressed()
.Посмотрим, что у нас получилось в итоге:
Отлично, поздравляем вас!
Кстати, мы можем удалить файл
toolbar_search_user.xml
, т.к. он нам больше не понадобится.Полный листинг кода:
SearchUsersActivity.java
activity_search_users.xml
В результате данного урока мы:
Toolbar
;Toolbar
пользовательскими элементами.