1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yangchong-YCDialog

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

自定义对话框

目录介�лю

  • 1. Использование метода
    • 1.1 Добавление библиотеки
    • 1.2 О диалоговых окнах
    • 1.3 Использование кода
  • 2. Скриншот пользовательского диалогового окна
  • 3. Обновление версии
  • 4. Серия блогов о диалоговых окнах [всего 7 статей]
  • 5. Управление ошибками в диалоговых окнах
  • 6. Дополнительная информация

Хорошие новости

  • Блог с заметками, включая основы Java и глубокие знания, технические блоги Android, заметки по изучению Python и многое другое, а также сборник ошибок, с которыми я столкнулся во время разработки, и, конечно же, большое количество вопросов для собеседований, которые я собрал за свою карьеру. Все это открыто для всех!
  • Адрес ссылки: https://github.com/yangchong211/YCBlogs
  • Если вам нравится, вы можете поставить звезду, спасибо! Конечно, мы также приветствуем предложения и комментарии, всё начинается с малого, изменения накапливаются!

Использование метода

  • 1.1 Сначала добавьте в файл build.gradlew проекта:
compile 'cn.yc:YCDialogLib:3.6.5'
  • 1.2 Диалоговые окна бывают следующих типов:
    • 1.2.0 Запрос разрешения на уведомления
    • 1.2.1 Диалоговое окно в стиле iOS
    • 1.2.2 Пользовательский Toast
    • 1.2.3 Пользовательский простой PopupWindow
    • 1.2.4 Пользовательское PopupWindow, режим Builder
    • 1.2.5 Пользовательское диалоговое окно нижнего колонтитула, режим Builder (с использованием меню)
    • 1.2.6 Пользовательский диалог фрагмента макета, заполнение обычного макета
    • 1.2.7 Пользовательский диалог фрагмента макета, заполнение макета списка
    • 1.2.8 Пользовательские общие диалоговые окна, режим Builder
    • 1.2.9 Пользовательская загрузка
    • 1.3.0 Пользовательский SnackBar

1.2.0 Запрос разрешения на уведомление

  • Одна строка кода для вызова, рекомендуется добавить, большинство разрешений на уведомления мобильных телефонов включены. Если они отключены, то всплывающее окно не будет отображаться, но некоторые телефоны, такие как определённые модели Xiaomi и Huawei, требуют ручного включения разрешений.
// Обратите внимание, что рекомендуется добавить этот запрос
DialogUtils.requestMsgPermission(this);

1.2.1 Диалог в стиле IOS, пользовательское диалоговое окно

  • Поддерживает настройку темы диалога, поддерживает настройку события отмены listener, поддерживает установку имени и заголовка. Существует несколько методов построения для создания объектов...
private void showCustomDialog() {
    final List<String> names = new ArrayList<>();
    names.add("拍照");
    names.add("相册");
    names.add("其他");
    showDialog(new CustomSelectDialog.SelectDialogListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        }
    }, names);
}
private CustomSelectDialog showDialog(CustomSelectDialog.SelectDialogListener listener,
                                        List<String> names) {
    CustomSelectDialog dialog = new CustomSelectDialog(this,
            R.style.transparentFrameWindowStyle, listener, names);
    dialog.setItemColor(R.color.colorAccent,R.color.colorPrimary);
    // Проверка активности не завершается
    if (!this.isFinishing()) {
        dialog.show();
    }
    return dialog;
}

1.2.2 Тост

  • Используйте режим конструктора для создания цепочки программирования, одна строка кода может установить тост. Обратите внимание: чтобы избежать утечки памяти статического тоста, можно использовать контекст приложения.
  • Поддержка настройки цвета фона тоста, поддержка настройки пользовательских тостов, поддержка установки различных свойств тоста и т.д., использование следующим образом:
// Можно свободно установить цвет фона тоста, по умолчанию он полностью чёрный
ToastUtils.setToastBackColor(this.getResources().getColor(R.color.color_7f000000));

// Просто установите самый простой тост, только содержимое тоста
ToastUtils.showRoundRectToast("Пользовательский тост");

// Установить заголовок и содержимое тоста
ToastUtils.showRoundRectToast("Тост", "Сянган Цзянь Юй Ян Чун - шутник");

// Третий вид напрямую устанавливает пользовательский макет тоста
ToastUtils.showRoundRectToast(R.layout.view_layout_toast_delete);

// Или используйте режим bulider для непосредственного создания
ToastUtils.Builder builder = new ToastUtils.Builder(this.getApplication());
builder
        .setDuration(Toast.LENGTH_SHORT)
        .setFill(false)
        .setGravity(Gravity.CENTER)
        .setOffset(0)
        .setDesc("Содержание")
        .setTitle("Заголовок")
        .setTextColor(Color.WHITE)
        .setBackgroundColor(this.getResources().getColor(R.color.blackText))
        .build()
        .show();

1.2.3 Простой PopupWindow

  • Просто нужно наследовать BasePopDialog, реализовать два абстрактных метода.
// Первый шаг, пользовательский pop, наследуйте класс BasePopDialog и повторно реализуйте два абстрактных метода
public class CustomPop extends BasePopDialog {

    public CustomPop(Context context) {
        super(context);
    }

    @Override
    public int getViewResId() {
        return R.layout.view_pop_custom;
    }

    @Override
    public void initData(View contentView) {
        TextView tv_pop = (TextView) contentView.findViewById(R.id.tv_pop);
        tv_pop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtils.showRoundRectToast("Убирайся отсюда!");
            }
        });
    }
}

// Второй шаг, создайте pop и покажите его
CustomPop customPop = new CustomPop(this);
customPop.setDelayedMsDismiss(2500);
customPop.setBgAlpha(0.5f);
customPop.showAsDropDown(tv6, 0, -tv6.getMeasuredHeight() - tv6.getHeight());

1.2.4 PopupWindow в режиме Builder

  • Как показано ниже, более подробное описание использования метода можно найти непосредственно в коде демонстрационного проекта.
View contentView = LayoutInflater.from(this).inflate(R.layout.pop_layout,null);
// Создание и отображение popWindow
popWindow = new CustomPopupWindow.PopupWindowBuilder(this)
        //.setView(R.layout.pop_layout)
        .setView(contentView)
        .setFocusable(true) ```
// При появлении popWindow фон становится темнее?
.enableBackgroundDark(true)

// Управление яркостью
.setBgDarkAlpha(0.7f)
.setOutsideTouchable(true)
.setAnimationStyle(R.style.popWindowStyle)
.setOnDissmissListener(new PopupWindow.OnDismissListener() {
    @Override
    public void onDismiss() {
        // Когда диалог закрывается
    }
})
.create()
.showAsDropDown(tv6, 0, 10);

1.2.5 Пользовательский нижний диалог Dialog, режим Builder (с использованием меню)

  • Код следующий:
new CustomBottomDialog(MainActivity.this)
    .title("Это заголовок")
    .setCancel(true, "Отменить выбор")
    .orientation(CustomBottomDialog.VERTICAL)
    .inflateMenu(R.menu.menu_share, new OnItemClickListener() {
        @Override
        public void click(CustomItem item) {

        }
    })
    .show();

1.2.6 Пользовательский диалог DialogFragment с заполнением обычного макета

  • Аналогично 1.2.7. Можно сначала установить demo и посмотреть на эффект. Использование метода следующее:
final BottomDialogFragment dialog = new BottomDialogFragment();
dialog.setFragmentManager(getSupportFragmentManager());
dialog.setViewListener(new BottomDialogFragment.ViewListener() {
    @Override
    public void bindView(View v) {
        TextView tv_cancel = (TextView) v.findViewById(R.id.tv_cancel);
        tv_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismissDialogFragment();
            }
        });
    }
});
dialog.setLayoutRes(R.layout.dialog_bottom_layout);
dialog.setDimAmount(0.5f);
dialog.setTag("BottomDialog");
dialog.setCancelOutside(true);
// Эту высоту можно настроить самостоятельно, очень гибко
dialog.setHeight(getScreenHeight() / 2);
dialog.show();

1.2.7 Пользовательский диалог DialogFragment с заполнением макета списка

  • Это ранее созданный нижний диалог Dialog в университете Шаньчжу, который можно настроить под собственные макеты view или layout, можно задать tag, разрешить или запретить закрытие диалога, а также можно настроить высоту диалога.
  • Довольно распространено, например, при загрузке музыки или видео и т.д., страница диалога может прокручиваться, OK, тогда вы можете использовать это. Код не слишком сложный, конкретные сценарии использования можно найти в другом моем демо: https://github.com/yangchong211/YCVideoPlayer
final List<DialogBean> list = new ArrayList<>();
for (int a = 0; a < 20; a++) {
    DialogBean dialogBean = new DialogBean("ooo", "杨充", "title");
    list.add(dialogBean);
}

BottomDialogFragment.create(getSupportFragmentManager())
    .setViewListener(new BottomDialogFragment.ViewListener() {
        @Override
        public void bindView(View v) {
            RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.recyclerView);
            ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
            ImageView ivDownload = (ImageView) v.findViewById(R.id.iv_download);

            recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
            DialogListAdapter mAdapter = new DialogListAdapter(MainActivity.this, list);
            recyclerView.setAdapter(mAdapter);
            final RecycleViewItemLine line = new RecycleViewItemLine(
                    MainActivity.this, LinearLayout.HORIZONTAL, 2,
                    MainActivity.this.getResources().getColor(R.color.grayLine));
            recyclerView.addItemDecoration(line);
            mAdapter.setOnItemClickListener(new DialogListAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(int position) {

                }
            });
            View.OnClickListener listener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                        case R.id.iv_cancel:

                            break;
                        case R.id.iv_download:
                            ToastUtils.showToast("Скачать");
                            break;
                        default:
                            break;
                    }
                }
            };
            ivCancel.setOnClickListener(listener);
            ivDownload.setOnClickListener(listener);
        }
    })
    .setLayoutRes(R.layout.dialog_bottom_layout_list)
    .setDimAmount(0.5f)
``` **1.2.8. Создание пользовательских диалоговых окон в режиме Builder**

Очень часто используются диалоговые окна, так как встроенные диалоговые окна не всегда выглядят достаточно привлекательно. Поэтому возникает необходимость создания собственных диалоговых окон. Можно настроить заголовок, содержимое и кнопки «Отмена», «ОК» и другие, а также их содержание и цвет.

Обратите внимание: если какое-либо свойство установлено пустым или не задано, то соответствующий макет будет скрыт. Это также зависит от конкретных бизнес-сценариев компании и постепенно развивается. Конкретный эффект можно увидеть непосредственно в демонстрационном проекте.

*Пример кода:*

CustomDialogFragment .create(getSupportFragmentManager()) .setTitle("Это заголовок") .setContent("Это содержимое диалогового окна") .setOtherContent("Другое") .setDimAmount(0.2f) .setTag("dialog") .setCancelOutside(true) .setCancelListener(new View.OnClickListener() { @Override public void onClick(View v) { CustomDialogFragment.dismissDialogFragment(); ToastUtils.showRoundRectToast("Отменено"); } }) .setOkListener(new View.OnClickListener() { @Override public void onClick(View v) { CustomDialogFragment.dismissDialogFragment(); ToastUtils.showRoundRectToast("Определено"); } }) .setOtherListener(new View.OnClickListener() { @Override public void onClick(View v) { CustomDialogFragment.dismissDialogFragment(); ToastUtils.showRoundRectToast("Другой контент"); } }) .show();


**1.2.9. Создание окна загрузки с помощью одной строки кода**

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

*Пример кода:*

// Начало загрузки ViewLoading.show(this); ViewLoading.show(this,"Загрузка..."); // Завершение загрузки ViewLoading.dismiss(this);


**1.3.0. Создание SnackBar**

Можно вызвать одну строку кода или использовать цепное программирование. Поддерживает настройку свойств длительности отображения, цвета фона, размера шрифта, цвета текста, содержимого действия, размера и цвета текста действия, события нажатия, значка. Больше информации можно получить, запустив демонстрационный проект!

*Примеры кода:*

1. Только настройка текста:

SnackBarUtils.showSnackBar(это, «Уходите»);

2. Настройка текста, действия и события клика:

SnackBarUtils.showSnackBar (это, "Уходите", "ДЕЙСТВИЕ", новый View.OnClickListener () {
    @Override
    public void onClick (View v) {
        ToastUtils.showRoundRectToast («Уходите?»);
    }
});

3. Настройка текста, действия, события клика и значка:

SnackBarUtils.showSnackBar (это, «Уходите», «ДЕЙСТВИЕ», R.drawable.icon_cancel, новый View.OnClickListener () {
    @Override
    public void onClick (View v) {
        ToastUtils.showRoundRectToast ("Уходите?");
    }
});

4. Цепное программирование:

SnackBarUtils.builder()
    .setBackgroundColor (this.getResources().getColor(R.color.color_7f000000))
    .setTextSize (14)
    .setTextColor (this.getResources().getColor(R.color.white))
    .setTextTypefaceStyle (Typeface.BOLD)
    .setText («Уходите»)
    .setMaxLines (4)
    .centerText()
    .setActionText («Получено»)
    .setActionTextColor (this.getResources().getColor(R.color.color_f25057))
    .setActionTextSize (16)
    .setActionTextTypefaceStyle (Typeface.BOLD)
    .setActionClickListener (новый View.OnClickListener () {
        @Override
        public void onClick (View v) {
            ToastUtils.showRoundRectToast («Уходите?»);
        }
    })
    .setIcon (R.drawable.icon_cancel)
    .setActivity (MainActivity.this)
    .setDuration (SnackBarUtils.DurationType.LENGTH_INDEFINITE)
    .build()
    .show ();

#### 2. Пользовательские скриншоты диалогов

На следующих скриншотах показаны примеры пользовательских диалогов:

| Скриншот |
| --- |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/1.jpg) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/2.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/3.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/4.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/5.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/6.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/7.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/8.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/9.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/10.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/11.png) |
| ![image](https://github.com/yangchong211/YCDialog/blob/master/pic/12.png) |

#### 3. Информация о версиях обновлений

v1.0 — обновление 2016-06-02;

v1.4 — обновление 2017-08-09;

v3.3 — обновление 2018-01-12;

v3.4 — обновление 2018-01-18;

v3.5 — обновление 2018-01-31;

v3.5.1 — обновление 2018-06-02;

v3.5.3 — обновление 2018-09-10;

v3.6.5 — обновление 2018-09-15.

#### 4. Серия блогов о диалоговых окнах

В этом разделе содержится информация о серии блогов, посвящённых диалоговым окнам.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Пользовательские всплывающие окна, в том числе: * пользовательский Toast, созданный с использованием паттерна Builder, поддерживает настройку множества свойств тоста; * настраиваемый компонент dialog, имитирующий всплывающее окно в стиле iOS; * диалоговое окно DialogFragment с поддержкой пользовательских макетов и возможностью заполнения макета ... Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yangchong-YCDialog.git
git@api.gitlife.ru:oschina-mirror/yangchong-YCDialog.git
oschina-mirror
yangchong-YCDialog
yangchong-YCDialog
master