Подтвердить что ты не робот

Изменить фон ProgressDialog

Я пытаюсь изменить фон ProgressDialog. Я обыскал сеть и нашел различные предложения (например Как удалить границу из диалога?), но я не могу заменить фактический фон ProgressDialog. Вместо этого я получаю другой фон (желтый) за диалогом:

Styled Dialog

Мой стиль:

<style name="StyledDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/panel_background</item>
</style>

Код, запускающий ProgressDialog:

ProgressDialog dialog = new ProgressDialog(this, R.style.StyledDialog);
dialog.setTitle("The title");
dialog.setMessage("The message.");
dialog.show();

Вывод - это тот же самый 9 патч, который включен в SDK, я просто изменил цвет. Я был бы очень признателен за некоторые намеки на то, что я делаю неправильно.

4b9b3361

Ответ 1

Комментарий Aleks G (ниже вопроса) указывает в правильном направлении. Внешний вид диалога определяется отдельным стилем (android:alertDialogStyle). Но нельзя применять стиль непосредственно к ProgressDialog. Теперь, как мне получить желтый фон?

Шаг 1. Определите тему, которая наследуется от Theme.Dialog:

<style name="MyTheme" parent="@android:style/Theme.Dialog">
    <item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item>
    <item name="android:textColorPrimary">#000000</item>
</style>

Здесь вы можете определить такие вещи, как цвет фона для всего окна (желтый в вопросе), цвета шрифта и т.д. Что действительно важно, это определение android:alertDialogStyle. Этот стиль управляет появлением черной области в вопросе.

Шаг 2. Определите CustomAlertDialogStyle:

<style name="CustomAlertDialogStyle">
    <item name="android:bottomBright">@color/yellow</item>
    <item name="android:bottomDark">@color/yellow</item>
    <item name="android:bottomMedium">@color/yellow</item>
    <item name="android:centerBright">@color/yellow</item>
    <item name="android:centerDark">@color/yellow</item>
    <item name="android:centerMedium">@color/yellow</item>
    <item name="android:fullBright">@color/yellow</item>
    <item name="android:fullDark">@color/yellow</item>
    <item name="android:topBright">@color/yellow</item>
    <item name="android:topDark">@color/yellow</item>
</style>

Это задает черную область в вопросе желтой.

Шаг 3: Примените MyTheme к ProgressDialog, не CustomAlertDialogStyle:

ProgressDialog dialog = new ProgressDialog(this, R.style.MyTheme);

И вот результат:

Styled ProgressDialog

Эта же процедура работает с AlertDialog (который является родительским классом ProgressDialog).

Ответ 2

Вы можете попробовать gist. Он в основном устанавливает цветной фильтр на растягиваемый.

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ProgressBar;

public class ColoredProgressBar extends ProgressBar {
   public ColoredProgressBar(Context context) {
      super(context);
      if (!isInEditMode())
         init();
   }

   public ColoredProgressBar(Context context, AttributeSet attrs) {
      super(context, attrs);
      if (!isInEditMode())
         init();
   }

   public ColoredProgressBar(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
      if (!isInEditMode())
         init();
   }

   /**
    * Changes color.
    */
   private void init() {
      getIndeterminateDrawable().setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.MULTIPLY);
   }
}