Как изменить тему для AlertDialog - PullRequest
215 голосов
/ 11 марта 2010

Мне было интересно, может ли кто-нибудь мне помочь. Я пытаюсь создать собственный 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 находится в папке для рисования. Это также доступно в папке 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. Кто-нибудь может мне помочь с этим?

Ответы [ 13 ]

2 голосов
/ 24 июля 2012

Решение от Arve Waltin выглядит хорошо, хотя я еще не тестировал его. Есть и другое решение, если у вас возникли проблемы с тем, чтобы заставить это работать ... Расширьте AlertDialog.Builder и переопределите все методы (например, setText, setTitle, setView и т. Д.), Чтобы не устанавливать фактический текст диалога / title / view, но чтобы создать новый вид в диалоге View, сделайте все в нем. Тогда вы можете оформить все как угодно.

Чтобы уточнить, что касается родительского класса, представление установлено, и ничего больше.

Что касается вашего пользовательского расширенного класса, все делается в этом представлении.

0 голосов
/ 15 декабря 2017
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Description");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
0 голосов
/ 01 апреля 2011

Это можно сделать просто с помощью setView () в Builder. Вы можете создать любой вид по вашему выбору и подать в строителя. Это хорошо работает. Я использую пользовательский TextView, который отображается в диалоговом окне. Я не устанавливаю сообщение, и это пространство используется для отображения моего обычного текстового представления.

...