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

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

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

  • Измените полупрозрачный оверлейный фон от черного по умолчанию до полупрозрачного белого.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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();
    }
});