Как изменить тему для AlertDialog

Я задавался вопросом, мог ли кто-то выручить меня. Я пытаюсь создать пользовательский AlertDialog. Чтобы сделать это, я добавил следующую строку кода в styles.xml

<resources>
 <style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
  <item name="android:windowBackground">@drawable/color_panel_background</item>
 </style>
</resources>
  • color_panel_background.9.png расположен в drawable папке. Это также доступно в Android SDK res папка.

Следующее является основным видом деятельности.

package com.customdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class CustomDialog extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setTheme(R.style.CustomAlertDialog);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("HELLO!");
        builder .setCancelable(false)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //dialog.cancel();
           }
       });

        AlertDialog alertdialog = builder.create();
        alertdialog.show();
    }
}

Для применения темы к AlertDialog я должен был установить тему на текущий контекст.

Однако я просто, может казаться, не заставляю приложение показывать настроенный AlertDialog. Кто-либо может выручить меня с этим?

229
задан ROMANIA_engineer 1 November 2017 в 12:15
поделиться

1 ответ

Думаю, это невозможно. По крайней мере, со Строителем. Я работаю с 1.6, и реализация в Builder.create ():

public AlertDialog create() {
    final AlertDialog dialog = new AlertDialog(P.mContext);
    P.apply(dialog.mAlert);
    [...]
}

, которая вызывает конструктор AlertDialog, не связанный с темой, который выглядит следующим образом:

protected AlertDialog(Context context) {
    this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}

В AlertDialog есть второй конструктор для изменение тем:

protected AlertDialog(Context context, int theme) {
    super(context, theme);
    [...]
}

, которые Строитель просто не вызывает.

Если Dialog в любом случае довольно общий, я бы попытался написать подкласс AlertDialog, вызвав второй конструктор и использовать этот класс вместо механизма Builder.

8
ответ дан 23 November 2019 в 03:42
поделиться
Другие вопросы по тегам:

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