Как центрировать индикатор хода выполнения в ProgressDialog легко (когда никакой проведенный заголовок/текст)

При вызове progressDialog = ProgressDialog.show(this, null, null, true); обычно разработчики хотят только показать изображение признака прогресса и обычно были бы оно ожидать центрироваться в окне (по крайней мере, с регулярной точки зрения дизайна UI). Но изображение является слишком крайне левым, кажется, что некоторое дополнение/поле на правой стороне все еще вычисляется в для (дополнительно) текста справа, хотя мы не передаем текста как параметра. Это просто сделало бы жизнь немного легче для разработчика :) Таким образом, мы не должны создавать пользовательское диалоговое окно только, чтобы иметь индикатор хода выполнения, центрируемый по умолчанию.

(Я зарегистрировал это как запрос новых функций по http://code.google.com/p/android/issues/detail?id=9697; соедините его звездой, если также требуется видеть улучшенный).

Теперь мои вопросы:

  1. Как я могу легко центрировать изображение прогресса, не имея необходимость полностью создавать мой собственный аварийный диалоговый класс? Какой-либо параметр я, возможно, пропустил?

  2. Кроме того, как установить предпосылки к прозрачному?

Я также задаюсь вопросом об этом: https://stackoverflow.com/questions/2866141/how-to-put-custom-animation-into-a-progressdialog я еще на самом деле не попробовал его сам, но если Вы не можете создать пользовательские анимации, это означает, хотите ли Вы своего рода анимированный индикатор хода выполнения, всегда необходимо ли расширять класс ProgressDialog? Смотря на класс ProgressDialog, хотя, я ничего не нахожу кроме регулярного drawables, хотя (ProgressDialog.java), они не используют AnimatedDrawable там.

62
задан Community 23 May 2017 в 12:26
поделиться

1 ответ

Я провел некоторое тестирование и чувствую, что лучший способ достичь этого - сделать пользовательский Dialog.

Вот пример того, что я сделал. Это ответит на вопрос номер 2, но даст вам представление о том, как решить вопрос номер 1.

public class MyProgressDialog extends Dialog {

    public static MyProgressDialog show(Context context, CharSequence title,
            CharSequence message) {
        return show(context, title, message, false);
    }

    public static MyProgressDialog show(Context context, CharSequence title,
            CharSequence message, boolean indeterminate) {
        return show(context, title, message, indeterminate, false, null);
    }

    public static MyProgressDialog show(Context context, CharSequence title,
            CharSequence message, boolean indeterminate, boolean cancelable) {
        return show(context, title, message, indeterminate, cancelable, null);
    }

    public static MyProgressDialog show(Context context, CharSequence title,
            CharSequence message, boolean indeterminate,
            boolean cancelable, OnCancelListener cancelListener) {
        MyProgressDialog dialog = new MyProgressDialog(context);
        dialog.setTitle(title);
        dialog.setCancelable(cancelable);
        dialog.setOnCancelListener(cancelListener);
        /* The next line will add the ProgressBar to the dialog. */
        dialog.addContentView(new ProgressBar(context), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        dialog.show();

        return dialog;
    }

    public MyProgressDialog(Context context) {
        super(context, R.style.NewDialog);
    }
}

Все статические методы исходят из this ссылки, ничего странного, но магия происходит в конструкторе. Проверьте, что я передаю в качестве параметра стиль. Этот стиль следующий:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="NewDialog" parent="@android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:background">@android:color/transparent</item>
    </style>
</resources>

Результатом этого является ProgressBar, вращающийся в центре экрана. Без backgroundDim и без Dialog.

104
ответ дан 24 November 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: