Android - пользовательский цвет фона AlertDialog - PullRequest
8 голосов
/ 22 октября 2010

Итак, я вижу, что у нас могут быть алерты и диалоги с серым и белым (при заданном обращении ...) цветами фона.

Чтобы узнать, почему я проверил themes.xml в sdk, проверив, меня привели к drawables итам я понял, что фон алертидальога сделан не программно, а через некоторые изображения.И эти изображения гарантируют наличие двух серых (или белых при инверсии цвета) горизонтальных линий сверху (область заголовка) и снизу (чуть выше области кнопок) диалога, когда мы используем LayoutInflater, чтобы просто установить другой цвет фона.

Так что мой вопрос в том, что LayoutInflator бесполезен, и я предполагаю, что мне нужно создать подклассlertdialog, что вы предлагаете мне сделать, чтобы сгенерировать AlertDialog с другим цветом фона?Что я должен переопределить?

Ответы [ 3 ]

17 голосов
/ 02 ноября 2010

Вместо того, чтобы использовать AlertDialog, я в конечном итоге использовал диалог. Чтобы получить индивидуальный вид:

1-Создайте диалоговое окно и удалите область заголовка (в противном случае вы получите пустую серую область сверху):

myDialog = new Dialog(this);
myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

2-Разработка макета в формате xml и установка в качестве содержимого диалога:

myDialog.setContentView(R.layout.mydialog_layout);

3-Если макет не является закругленным прямоугольником, он будет пересекаться с закругленными углами диалогового окна. Итак, разработайте макет в виде скругленного прямоугольника:

в mydialog_layout.xml:

android:background = "@layout/mydialog_shape"

mydialog_shape.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" 
     > 
     <gradient android:startColor="#FF0E2E57" 
     android:endColor="#FF0E2E57" 
            android:angle="225" android:paddingLeft="20dip"/> 

    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
     android:topLeftRadius="5dp" android:topRightRadius="5dp" android:paddingLeft="20dip"/> 
</shape>

4-Добавить слушателей к кнопкам в вашей активности:

Button button = (Button)myDialog.findViewById(R.id.dialogcancelbutton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    myDialog.cancel();
}});

Вот и все.

0 голосов
/ 01 апреля 2019

так просто ..

Dialog d=builder2.create();
...
d.show();
d.getWindow().setBackgroundDrawableResource(R.drawable.mydialog_shape);
0 голосов
/ 23 октября 2010

Напоминаю, что не все Android-диалоги созданы одинаково.Поэтому, если вы не хотите использовать диалоговое окно, которое поставляется с версией Android для устройства;Вам нужно написать совершенно новый диалог с нуля.

Редактировать:

Я думаю, вам нужно переопределить onCreateDialog с помощью пользовательского класса построителя диалогов.Как я уже сказал, я никогда этого не делал.Помните, что для того, чтобы соответствовать стилю Android MVC, вам также нужно определить диалог в XML.Если бы я собирался сделать это;Вероятно, я бы начал с макета XML, а затем кодировал бы пользовательский класс диалога, используя те же методы, что и обычный класс конструктора диалогов.Извините, что так расплывчато, я все еще изучаю Java и Android.

...