Как создать полностью настраиваемый диалог / всплывающее окно в Android (изменить цвет наложения и расположение диалогового окна) - PullRequest
39 голосов
/ 16 сентября 2010

Я хотел бы полностью изменить скин диалогового компонента по умолчанию в Android.В частности, я хотел бы сделать это:

  • Изменить полупрозрачный фон наложения с черного по умолчанию на полупрозрачный белый.

  • Измените окно диалога, удалив стандартную рамку оконного фрейма и заменив ее макетом, определенным в XML (это будет просто рисунок без полей с плавающими кнопками. Реального фрейма нет.)

Я видел учебники по созданию пользовательского макета для внутри диалогового окна (например, http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application),, но я не видел ничего относительно изменения цвета наложения и / или полной настройки всплывающего и поворачивающегося диалогового окнаэто больше в оверлей без "окна".

Ответы [ 2 ]

83 голосов
/ 17 сентября 2010

Я решил эту проблему и создал свой собственный всплывающий оверлей с настраиваемым цветным полупрозрачным фоном наложения, выполнив следующие действия:

1 - создайте новый xml-файл в папке res / values ​​/ и назовите его styles.xml

2 - Здесь вы будете определять свойства вашего диалога. Вот как выглядит моя. Если вы хотите заменить полупрозрачное черное наложение по умолчанию, отображаемое на экране, вам нужно установить значение windowIsFloating в false и изменить фон макета так, чтобы он соответствовал нужному цвету. Вот мой файл ниже, который я использовал:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@color/transparent_white</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

3 - Вернувшись в свой Java-код, при создании объекта диалога используйте конструктор, который передает и контекст, и тему. Например. myDialog = new Dialog(this, R.style.CustomDialogTheme); (CustomDialogTheme - это атрибут имени, указанный в файле styles.xml на шаге 2)

4 - Просто установите вид содержимого ваших диалоговых объектов в любой макет, которым вы хотите, чтобы ваш диалог выглядел. Например. myDialog.setContentView(R.layout.my_custom_overlay); Если вы хотите, чтобы ваше диалоговое окно отображалось в центре экрана, установите android:layout_gravity его корневого элемента на center

20 голосов
/ 10 января 2011

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

final Dialog d = new Dialog(this,R.style.CustomDialogTheme);
d.setContentView(R.layout.custom_dialog);
d.show();

Button close_btn = (Button) d.findViewById(R.id.close_btn);
close_btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        d.dismiss();
    }
});
...