Intereting Posts
Android studio sdk version 22 исключение во время рендеринга: action_bar Создание Android Keyboard Resilient против атак KeyLogger Android – Отмена AsyncTask Доступ к заголовкам ответов HTTP в WebView? Android, Как преобразовать String в Date? Android: установить только одно текстовое дополнение Присвоение фрагментов вкладкам в ActionBar с различной ориентацией RelativeLayout добавляет правило «RelativeLayout.LEFT_OF» не работает Как я могу масштабировать текстовые изображения, используя общие переходы элементов? Как установить другой цвет для нажатого состояния кнопки? Автоматическая загрузка автономного языка распознавания речи на Android Gson – прочитать значение с двумя разными ключами Установите равную ширину столбцов в макете таблицы в Android React Native: Как я могу определить, работает ли мой код в симуляторе? Кордова 2.1.0 (PhoneGap) создает скрипт для Android, который говорит, что «Проект уже существует» или «Произошла ошибка. Удаление проекта "

Диалоговое обрезание с помощью AppCompat-v7 22 приводит к уродливым теням на api <21

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

styles.xml:

<style name="AppTheme.Base" parent="Theme.AppCompat"> <!-- Set AppCompat's color theming attrs --> <item name="colorPrimary">@color/green</item> <item name="colorPrimaryDark">@color/green_darker</item> <item name="colorAccent">@color/accent</item> <item name="android:alertDialogTheme">@style/alertDialog</item> <item name="android:dialogTheme">@style/alertDialog</item> </style> <style name="alertDialog" parent="Theme.AppCompat.Dialog"> <item name="colorPrimary">@color/green</item> <item name="colorPrimaryDark">@color/green_darker</item> <item name="colorAccent">@color/accent</item> </style> 

Я получаю именно то, что хотел на android api> = 21, но на других устройствах я получаю «окно» вокруг диалогов.

Есть ли способ избавиться от «окна» вокруг диалогового окна и даже получить цветовую и материальную тему, примененную на api <21, желательно без каких-либо дополнительных расширений?

Приложение на Api <21:

Приложение по API <21

Приложение по API> = 21:

Приложение по API> = 21

Solutions Collecting From Web of "Диалоговое обрезание с помощью AppCompat-v7 22 приводит к уродливым теням на api <21"

С новым AppCompat v22.1 вы можете использовать новый AppCompat v22.1 android.support.v7.app.AlertDialog или новый AppCompatDialog

Просто используйте такой код (конечно, в вашем случае вы должны использовать пользовательский макет, чтобы иметь индикатор выполнения)

 import android.support.v7.app.AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle); builder.setTitle("Dialog"); builder.setMessage("Lorem ipsum dolor ...."); builder.setPositiveButton("OK", null); builder.setNegativeButton("Cancel", null); builder.show(); 

И используйте такой стиль:

 <style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorAccent">#FFCC00</item> <item name="android:textColorPrimary">#FFFFFF</item> <item name="android:background">#5fa3d0</item> </style> 

Если кто-то все еще ищет простое и эффективное решение, просто добавьте эту строку в свой стиль alertDialog:

 <item name="android:windowBackground">@android:color/transparent</item> 

PS, изменяющее это свойство, также влияет на диалоги PreferenceFragment на API> = 21, поэтому убедитесь, что вы используете разные стили: с прозрачным bg для API <21 и без каких-либо изменений для API> = 21

У меня была такая же проблема с новой библиотекой AppCompat 22 при использовании android.support.v7.app.AlertDialog для всех моих AlertDialogs, но дополнительные фоновые уровни затронули ProgressDialogs.

Все мои AlertDialogs при стилизации с использованием моей пользовательской темы выглядели великолепно, но у ProgressDialog было странное наложение на фоне, как описано в OP.

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

С помощью этих двух ссылок:

Как стилизовать AlertDialogs, как блог Pro и Joerg Richter, я смог избавиться от дополнительного слоя, нарисованного на <21 ProgressDialogs.

Проблема, которую я обнаружил, заключается в том, что на всех версиях ProgressBar рисует свой фон на основе того, что определено по умолчанию в «android: alertDialogStyle».

Поэтому, чтобы избавиться от дополнительного слоя, мне пришлось определить мои собственные стили и установить их для «android: alertDialogStyle». При этом я также переопределяю макеты по умолчанию, применяемые к ProgressDialogs.

Вот мои темы.xml:

 <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item> <item name="alertDialogTheme">@style/MyAlertDialogTheme</item> <item name="android:alertDialogStyle">@style/MyAlertDialogStyles</item> 

И мои styles.xml:

 <style name="MyAlertDialogTheme"> <item name="android:windowIsFloating">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> <item name="android:background">@color/theme_alert_dialog_background</item> <item name="colorAccent">@color/theme_accent_1</item> </style> <style name="AlertDialog"> <item name="android:fullDark">@android:color/transparent</item> <item name="android:topDark">@android:color/transparent</item> <item name="android:centerDark">@android:color/transparent</item> <item name="android:bottomDark">@android:color/transparent</item> <item name="android:fullBright">@android:color/transparent</item> <item name="android:topBright">@android:color/transparent</item> <item name="android:centerBright">@android:color/transparent</item> <item name="android:bottomBright">@android:color/transparent</item> <item name="android:bottomMedium">@android:color/transparent</item> <item name="android:centerMedium">@android:color/transparent</item> </style> 

ProgressDialog – попробуйте ниже android 5

 dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 

или

 dialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND); 

Вы можете скачать версию 22.1.0 (обновлено несколько дней назад) и использовать android.support.v7.app.AlertDialog