MDC-111 Android: включение материальных компонентов в вашу кодовую базу (Java)

1. Введение

logo_components_color_2x_web_96dp.png

Компоненты Material (MDC) помогают разработчикам внедрять Material Design. Созданные командой инженеров и UX-дизайнеров Google, MDC включают в себя десятки красивых и функциональных компонентов пользовательского интерфейса и доступны для Android, iOS, веб-приложений и Flutter.material.io/develop

Material Components for Android (MDC Android) — это не новая система или фреймворк, требующий кардинального изменения дизайна вашего приложения. MDC Android построен на тех же классах и API, которые вам уже знакомы в Android, таких как кнопки AppCompat и текстовые поля. Компоненты, предоставляемые MDC Android, можно использовать по мере необходимости, и они сразу же улучшат дизайн вашего существующего приложения.

Что вы построите

В этом практическом задании вы замените некоторые существующие компоненты в форме новыми, созданными с помощью MDC.

Компоненты MDC-Android в этом практическом занятии.

  • Текстовые поля
  • Кнопки
  • Меню

Что вам понадобится

  • Базовые знания разработки под Android.
  • Android Studio (скачайте её здесь, если у вас её ещё нет).
  • Эмулятор или устройство Android (доступное через Android Studio)
  • Пример кода (см. следующий шаг)

Как бы вы оценили свой уровень опыта в разработке Android-приложений?

Новичок Средний Профессионал

2. Настройте среду разработки.

Скачайте стартовое приложение Codelab.

Стартовое приложение находится в каталоге material-components-android-codelabs-111-starter/java . Перед началом работы обязательно перейдите в этот каталог cd .

...или клонируйте его с GitHub

Чтобы клонировать этот код с GitHub, выполните следующие команды:

git clone https://github.com/material-components/material-components-android-codelabs
cd material-components-android-codelabs/
git checkout 111-starter

Загрузите стартовый код в Android Studio.

  1. После завершения работы мастера установки и появления окна «Добро пожаловать в Android Studio» нажмите « Открыть существующий проект Android Studio» . Перейдите в каталог, где вы установили пример кода, и выберите java -> shipping (или найдите shipping на своем компьютере), чтобы открыть проект Shipping.
  2. Подождите немного, пока Android Studio соберет и синхронизирует проект, как это отобразится в индикаторах активности в нижней части окна Android Studio.
  3. На этом этапе Android Studio может выдавать ошибки сборки, поскольку у вас отсутствует Android SDK или инструменты сборки, например, показанные ниже. Следуйте инструкциям в Android Studio, чтобы установить/обновить их и синхронизировать ваш проект.

gKYVUDrUs8bH1NfVV5DnikrjM7zJkP3j2rTbd0B66JVyySb54sS89vrTALAD6_AFp7p4CNA4OqOIAkyVjcR23CoUQwNtdsbEQ_sn5EooSqBQo9YBq9H_IsKctCTZBM8pci9WXlmlEw

Импортировать MDC-Android

Перейдите к файлу build.gradle модуля app и убедитесь, что блок dependencies включает зависимость от MDC Android:

api 'com.google.android.material:material:1.1.0-alpha06'

Запустите стартовое приложение

  1. Убедитесь, что конфигурация сборки слева от кнопки «Запуск/Воспроизведение» — это app .
  2. Нажмите зеленую кнопку «Запустить/Играть» , чтобы собрать и запустить приложение.
  3. В окне «Выбор целевого устройства развертывания» , если у вас уже есть устройство Android в списке доступных устройств, перейдите к шагу 8. В противном случае нажмите «Создать новое виртуальное устройство» .
  4. На экране «Выбор оборудования» выберите телефонное устройство, например Pixel 2 , а затем нажмите «Далее» .
  5. На экране «Образ системы» выберите последнюю версию Android , предпочтительно с самым высоким уровнем API. Если она не установлена, нажмите на появившуюся ссылку «Загрузить» и завершите загрузку.
  6. Нажмите «Далее» .
  7. На экране «Виртуальное устройство Android (AVD)» оставьте настройки без изменений и нажмите «Готово» .
  8. Выберите устройство Android в диалоговом окне выбора целевого устройства для развертывания.
  9. Нажмите «ОК» .
  10. Android Studio собирает приложение, развертывает его и автоматически открывает на целевом устройстве.

Успех! Вы должны увидеть приложение и его форму.

dba8e6132a12da58.png

3. Обновите текстовые поля.

Текстовые поля в стиле Material Design значительно превосходят по удобству использования обычные текстовые поля. Определив зону нажатия с помощью контура или фоновой заливки, пользователи с большей вероятностью будут взаимодействовать с вашей формой или идентифицировать текстовые поля в более сложном контенте.

Заменить стили текстового поля

В файле shipping_info_activity.xml добавьте следующий стиль ко всем XML-компонентам TextInputLayout :

shipping_info_activity.xml

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

Каждый TextInputLayout должен выглядеть следующим образом:

shipping_info_activity.xml

<com.google.android.material.textfield.TextInputLayout
   android:id="@+id/name_text_input"
   style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:errorEnabled="true">

   <com.google.android.material.textfield.TextInputLayout
       android:id="@+id/name_edit_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/label_name" />
</com.google.android.material.textfield.TextInputLayout>

Соберите и запустите:

824c2b33592b2c7e.png

Все текстовые поля обновлены в соответствии с новыми стандартами дизайна MDC.

Добавить ошибку

В текстовых полях MDC встроен механизм отображения ошибок. MDC добавляет красный текст под текстовым полем и обновляет элементы оформления, делая их также красными.

В ShippingInfoActivity.java обновите метод onCreate() следующим образом:

ShippingInfoActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.shipping_info_activity);

   View rootView = findViewById(android.R.id.content);

   final List<TextInputLayout> textInputLayouts = Utils.findViewsWithType(
           rootView, TextInputLayout.class);

   Button button = findViewById(R.id.save_button);
   button.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           boolean noErrors = true;
           for (TextInputLayout textInputLayout : textInputLayouts) {
               String editTextString = textInputLayout.getEditText().getText().toString();
               if (editTextString.isEmpty()) {
                   textInputLayout.setError(getResources().getString(R.string.error_string));
                   noErrors = false;
               } else {
                   textInputLayout.setError(null);
               }
           }

           if (noErrors) {
               // All fields are valid!
           }
       }
   });
}

Соберите и запустите. Нажмите СОХРАНИТЬ, но оставьте хотя бы одно текстовое поле пустым:

ef2a846d08f2780d.png

Пустые текстовые поля выделены красным цветом, а под ними отображается сообщение об ошибке.

4. Обновите кнопку.

MDC имеет кнопки со следующими функциями:

  • Чернильные волны
  • Закругленные углы
  • Поддержка тем оформления
  • Идеальная верстка и типографика.
  • Создано на основе класса AppCompatButton (стандартный класс кнопок Android), поэтому вы знаете, как использовать их в своем коде.

При желании замените класс кнопки.

По умолчанию библиотека Material автоматически преобразует обычные кнопки в кнопки MDC. Однако вы можете дополнительно заменить все ссылки на Button на MaterialButton, чтобы получить доступ к дополнительным методам, доступным только в MaterialButton, например, к изменению радиуса скругления углов. Кнопки MDC — это простой компонент, работающий по принципу «подключи и работай». Вам нужно всего лишь заменить имя XML-компонента Button на MaterialButton и применить к MaterialButton стиль MaterialButton по умолчанию.

В файле shipping_info_activity.xml измените название кнопки следующим образом:

shipping_info_activity.xml

<Button
   android:id="@+id/save_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

К:

shipping_info_activity.xml

<com.google.android.material.button.MaterialButton
   android:id="@+id/save_button"
   style="@style/Widget.MaterialComponents.Button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

Соберите и запустите:

824c2b33592b2c7e.png

5. Добавить карту

MaterialCardView — это компонент, построенный на основе CardView с использованием следующих компонентов:

  • Правильный фасад и стиль
  • Атрибуты толщины линии и цвета

Упаковка содержимого в открытку.

Оберните компонент MaterialCardView в ваш LinearLayout , содержащий контент из файла shipping_info_activity.xml , следующим образом:

shipping_info_activity.xml

<com.google.android.material.card.MaterialCardView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="16dp"
   app:contentPadding="16dp">


   <!-- LinearLayout goes here -->


</com.google.android.material.card.MaterialCardView>

Соберите и запустите. Вся форма должна быть заключена в карточку:

75c86ab9fa395e3c.png

Компонент Material Card View — это знакомый, но в то же время новый способ легко оформить контент в виде карточки.

6. Подведение итогов

Вы заменили некоторые распространенные компоненты, чтобы продемонстрировать ощутимую пользу: текстовые поля, кнопки и карточки, и вам не пришлось полностью переделывать дизайн приложения. Другие компоненты также могут существенно изменить ситуацию, например, верхняя панель приложения и TabLayout.

Следующие шаги

Вы можете ознакомиться с еще большим количеством компонентов MDC-Android, посетив каталог виджетов Android .

Мне удалось выполнить это практическое задание за разумное время и с разумными затратами усилий.

Полностью согласен Соглашаться Нейтральный Не согласен Категорически не согласен

Я хотел бы и в будущем продолжать использовать компоненты Material.

Полностью согласен Соглашаться Нейтральный Не согласен Категорически не согласен