Material Dialog — это комбинация различных типов диалогов, поддерживаемых openharmony API. Он содержит почти все компоненты пользовательского интерфейса с несколькими тестовыми примерами, включая диалоги с текстом, изображением, кнопками, элементами ListContainer, цветовой палитрой, пользовательскими представлениями и индикатором выполнения.
Core
Модуль Core содержит всё необходимое для начала работы с библиотекой. В нём есть все основные функции и функции для нормального использования.
dependencies { ... implementation 'com.afollestad.material-dialogs:core:3.2.1' }
Основы
Вот очень простой пример создания и отображения диалога:
new MaterialDialog.Builder(this)
.content(ResourceTable.String_shareLocationPrompt)
.positiveText(ResourceTable.String_agree)
.negativeText(ResourceTable.String_disagree)
.show();
this должен быть Context, который привязан к окну, например, Ability.
Кнопки действий
Есть простые методы добавления кнопок действий:
new MaterialDialog.Builder(this)
.title(ResourceTable.String_useGoogleLocationServices)
.content(ResourceTable.String_useGoogleLocationServicesPrompt)
.positiveText(ResourceTable.String_agree)
.negativeText(ResourceTable.String_disagree)
.show();
Если кнопки действий слишком длинные, чтобы поместиться в ширину диалога, они будут автоматически сложены:
Добавление значка
Вы можете отобразить значок слева от заголовка:
new MaterialDialog.Builder(this)
.icon(ResourceTable.Media_ic_launcher)
.limitIconToDefaultSize()
.title(ResourceTable.String_useGoogleLocationServices)
.content(ResourceTable.String_useGoogleLocationServicesPrompt)
.positiveText(ResourceTable.String_agree)
.negativeText(ResourceTable.String_disagree)
.show();
Обратные вызовы Существует несколько обратных вызовов жизненного цикла, которые вы можете подключить: new MaterialDialog.Builder(this) .title(ResourceTable.String_useGoogleLocationServices) .content(ResourceTable.String_useGoogleLocationServicesPrompt) .positiveText(ResourceTable.String_agree) .negativeText(ResourceTable.String_disagree) .neutralText(ResourceTable.String_more_info) .showListener(dialog -> showToast("onShow")) .cancelListener(dialog -> showToast("onCancel")) .dismissListener(dialog -> showToast("onDismiss")) .show();
Список Тестовые случаи списка имеют несколько тестовых случаев, включающих одиночный и множественный выбор.
Простой
Можно показывать списки, используя расширение listItems на MaterialDialog:
new MaterialDialog.Builder(this)
.title(ResourceTable.String_socialNetworks)
.items(new String[]{"Twitter", "Google", "Instagram", "Facebook"})
.itemsCallback((dialog, view, which, text) -> showToast(which + ": " + text))
.show();
Одиночный выбор
Можно показывать одиночный выбор (радиокнопку), используя расширение listItemsSingleChoice на MaterialDialog:
new MaterialDialog.Builder(this)
.title(ResourceTable.String_socialNetworks)
.items(new String[]{"Twitter", "Google", "Instagram", "Facebook"})
.itemsDisabledIndices(1, 3) **Элементы CallbackSingleChoice (2)**
showToast(which + ": " + text); return true; // разрешить выбор
Множественный выбор
Вы можете отобразить списки с множественным выбором (флажки), используя расширение listItemsMultiChoice для MaterialDialog:
new MaterialDialog.Builder(this) .title(ResourceTable.String_socialNetworks) .items(new String[]{"Twitter", "Google", "Instagram", "Facebook"}) .itemsCallbackMultiChoice( new Integer[]{1, 3}, (dialog, which, text) -> { StringBuilder str = new StringBuilder(); for (int i = 0; i < which.length; i++) { if (i > 0) { str.append('\n'); } str.append(which[i]); str.append(": "); str.append(text[i]); } showToast(str.toString()); return true; // разрешить выбор }) .onNeutral((dialog, which) -> dialog.clearSelectedIndices(true)) .onPositive((dialog, which) -> dialog.hide()) .alwaysCallMultiChoiceCallback() .positiveText(ResourceTable.String_md_choose_label) .autoDismiss(false) .neutralText(ResourceTable.String_clear_selection) .show();
Пользовательские адаптеры
Если вы хотите настроить списки для использования собственных представлений, вам необходимо использовать пользовательский адаптер.
final ButtonItemAdapter buttonItemAdapter = new ButtonItemAdapter(this, new String[]{"Twitter", "Google", "Instagram", "Facebook"}); buttonItemAdapter.setCallbacks( itemIndex -> showToast("Элемент нажат: " + itemIndex), buttonIndex -> showToast("Кнопка нажата: " + buttonIndex)); new MaterialDialog.Builder(this).title(ResourceTable.String_socialNetworks).baseItemProvider(buttonItemAdapter).show();
Флажки в запросах
Флажки можно использовать вместе с любым другим типом диалога, они отображаются в том же представлении, где показаны кнопки действий.
new MaterialDialog.Builder(this) .icon(ResourceTable.Media_ic_launcher) .limitIconToDefaultSize() .title(ResourceTable.String_permissionSample) .positiveText(ResourceTable.String_allow) .negativeText(ResourceTable.String_deny) .onAny((dialog, which) -> showToast("Флажок установлен? " + dialog.isPromptCheckBoxChecked())) .checkBoxPrompt(ResourceTable.String_dont_ask_again, false, new AbsButton.CheckedStateChangedListener() { @Override public void onCheckedChanged(AbsButton absButton, boolean checked) { if (checked) { setAbsButtonBackgroundElement(absButton, ResourceTable.Media_abc_btn_check_to_on_mtrl_015); } else { setAbsButtonBackgroundElement(absButton, ResourceTable.Media_abc_btn_check_to_on_mtrl_000); } } }) .show();
Пользовательские представления
Многие из включённых расширений используют пользовательские представления, такие как диалог выбора цвета. Также есть простой пример в демонстрационном проекте.
Прогресс
В этом модуле у нас есть тестовый случай progressbar с выполнением горизонтального и кругового progressbar.
Ввод
Модуль ввода содержит расширения к основному модулю, такие как текстовый ввод.
Цвет
Модуль цвета содержит расширения к основному модулю. Выбор цвета
Этот тестовый случай поможет нам изменить цвет панели навигации и строки состояния, используя выбранный цвет из палитры. Мы также можем изменить цвет с помощью пользовательского раздела цветов, который имеет SeekBar для изменения цвета ARGB.
Основы
Выбор цвета показывает простую сетку цветов.
new ColorChooserDialog.Builder(this, ResourceTable.String_color_palette) .titleSub(ResourceTable.String_colors) .preselect(primaryPreselect) .show();
Дополнительные цвета
Можно указать дополнительные цвета, которые находятся на уровень ниже каждого основного цвета. Размер массива основных цветов должен соответствовать размеру массива дополнительных цветов.
Выбор ARGB
DateTime
Модуль datetime содержит расширения для создания диалоговых окон выбора даты, времени и даты-времени.
MaterialDialog dialog = new MaterialDialog.Builder(this)
.title(ResourceTable.String_date_picker)
.customView(ResourceTable.Layout_dialog_datepicker, false)
.positiveText(ResourceTable.String_ok)
.negativeText(ResourceTable.String_cancel)
.build();
DatePicker datePicker = (DatePicker) dialog.getCustomView().findComponentById(ResourceTable.Id_datePicker);
datePicker.setDateOrder(DatePicker.DateOrder.DMY);
dialog.show();
Файлы
Модуль files содержит расширения к основному модулю, такие как выбор файлов и папок. Используя этот тестовый случай, мы можем выбрать файл и папку из локального хранилища.
new FolderChooserDialog.Builder(this)
.chooseButton(ResourceTable.String_md_choose_label)
.allowNewFolder(true, 0)
.show();
Способ 1: Сгенерируйте пакет .har через библиотеку и добавьте пакет .har в папку libs. Добавьте следующий код в начальный gradle: implementation fileTree (dir: 'libs', include: ['.jar', '.har'])
Способ 2: allprojects{ repositories{ mavenCentral() } } implementation 'io.openharmony.tpc.thirdlib:material-dialogs:1.0.2'
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )