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

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

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

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

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

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

         

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

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

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

     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(); } }); 
    Давайте будем гением компьютера.