Intereting Posts
Как исправить Genymotion в linux ElementaryOS с ошибкой `CXXABI_1.3.8 'не найдено Могу ли я выполнить этот Android-запрос с помощью ContentResolver.query ()? (ЛЕВЫЙ ПРИСОЕДИНЕНИЕ И СЛУЧАЙ) Как получить все имена таблиц в базе данных android sqlite? Получение уникального идентификатора для маршрутизатора WiFi Как рассчитать расстояние между двумя точками, используя их долготу и значение широты ScheduledExecutorService или ScheduledThreadPoolExecutor Android-клавиатура скрывает EditText Как нарисовать рисунок на холсте при перетаскивании пальцев Каков наилучший общий формат для книги, такой как текст, который можно использовать для большинства типов мобильных телефонов Сброс LayoutParams в соответствии с тем, что определено в XML Android Studio – создание модулей без копирования файлов? Значение сообщений хореографа в Logcat Как управлять программным разделом ActionBar программно? Ошибка заполнения после того, как base64decoding подписи Google после покупки в приложении Есть ли разница в использовании Context.getText и Context.getResources.getText?

Как изменить фон диалоговых окон Android alert?

Я использую класс AlertDialog в своем приложении. По умолчанию эти диалоговые окна предупреждений имеют прозрачный фон. Вместо этого я пытаюсь использовать непрозрачный фон, очень неудачно. Это мои стили:

<style name="MyOpaqueActivity" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@drawable/my_background</item> <item name="android:alertDialogStyle">@style/MyOpaqueAlertDialog</item> </style> <style name="MyOpaqueAlertDialog" parent="@android:style/Theme.Dialog.Alert"> <item name="android:background">#454545</item> <item name="android:windowBackground">@drawable/my_background</item> <item name="android:popupBackground">@drawable/my_background</item> </style> 

Я применил стиль «MyOpaqueActivity» успешно для целых действий (фон фона изменен на «my_background»), но он не работает для диалогов предупреждений в рамках этих действий. Атрибут «alertDialogStyle» и мой стиль «MyOpaqueAlertDialog», похоже, не имеют никакого эффекта.

Итак, как я могу изменить фон этих диалоговых окон оповещений?

Solutions Collecting From Web of "Как изменить фон диалоговых окон Android alert?"

Ваш подход не будет работать. Кажется, что AlertDialog (и Builder) жестко задает тему и не чтит alertDialogStyle в любом месте:

 protected AlertDialog(Context context) { this(context, com.android.internal.R.style.Theme_Dialog_Alert); } public Builder(Context context) { this(context, com.android.internal.R.style.Theme_Dialog_Alert); } 

Здесь они пришли к одному и тому же выводу.

Обходным путем будет создание пользовательского диалогового класса, полученного из AlertDialog, который вызывает защищенный конструктор AlertDialog (context, R.style.MyOpaqueAlertDialog).

В последнем источнике для Android появился новый публичный конструктор для AlertDialog.Builder, который принимает аргумент темы. К сожалению, он еще не выпущен (может быть, в Gingerbread?).

Это легко сделать в стиле XML, как только вы увидите, что AlertDialogs имеют несколько специальные атрибуты.

Тем не менее, было бы интересно узнать, какую версию Android вы имеете в виду (или нацеливаете на нее). Насколько я знаю, тема.Dialog относительно новая. Новые версии Android также не используют AlertDialogs при любых обстоятельствах, когда их использовали более старые версии.

Это работает для меня в Android 2.2:

 <style name="MyTheme" parent="@android:style/Theme"> <item name="android:alertDialogStyle">@style/MyOpaqueAlertDialog</item> </style> <style name="MyOpaqueAlertDialog"> <item name="android:fullDark">@drawable/[...]</item> <item name="android:topDark">@drawable/[...]</item> <item name="android:centerDark">@drawable/[...]</item> <item name="android:bottomDark">@drawable/[...]</item> <item name="android:fullBright">@drawable/[...]</item> <item name="android:topBright">@drawable/[...]</item> <item name="android:centerBright">@drawable/[...]</item> <item name="android:bottomBright">@drawable/[...]</item> <item name="android:bottomMedium">@drawable/[...]</item> <item name="android:centerMedium">@drawable/[...]</item> </style> 

В новых версиях Android также есть андроид: progressLayout и android: horizontalProgressLayout для стиля AlertDialog.

Кроме того, в новых версиях Android можно ссылаться на тему AlertDialog, используя alertDialogTheme вместо alertDialogStyle в пользовательской теме. AlertDDialogThemes поддерживают более знакомые и более мощные атрибуты, такие как windowBackground, windowTitleStyle и т. Д. Посмотрите на styles.xml и themes.xml.

К сожалению, документация о том, какая функция была добавлена, когда она очень бедна. Пожалуйста, узнайте сами, какой подход подходит для вас.

Из документации видно, что вы можете сделать это в onCreateDialog.

 FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom); fl.setBackgroundResource(); // has to be a drawable. 

Только другое решение – это настраиваемый диалог с использованием этой темы.