2015-10-13 1 views
7

Я хочу, чтобы настроить диалог предупреждения в моем Android приложения, так что я начал, изменяя атрибут alertDialogTheme темы моего приложения следующим образом:Пользовательского Диалог оповещения смотрит странно на Android 4.x

RES/значение/темы .xml

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="android:alertDialogTheme">@style/AlertDialogTheme</item> 
    </style> 

    <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"/> 
</resources> 

Просто, делая это, я не ожидал, что диалог по-другому смотреть от стандарта, так как новая тема AlertDialogTheme точно так же, как и его родитель. Он отлично работал на Android Lollipop, но в Android Kitkat за диалогом появляется белый прямоугольник. Вот как это выглядело так:

enter image description here

ли я делаю что-то неправильно? Может быть, использование неправильного родителя?

Спасибо!

+0

Просто установите фон прозрачным. – zgc7009

+0

@ zgc7009 Да, это работает на Kitkat, но тогда весь диалог становится прозрачным на Lollipop. Я мог бы создать два файла XML, по одному для каждого API, но если есть другой способ, я просто хотел бы сохранить его простым. – Milack27

+1

Почему вы не используете библиотеку AppCompat вместе с 'AlertDialogCompat'? –

ответ

13

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

Чтобы использовать его, вы должны быть уверены, что в вашем Gradle файл, который вы имеете следующую строку внутри ваших зависимостей:.

com.android.support:appcompat-v7:24.2.1
(Это одна последняя версия Убедитесь, что все пакеты обновляются, глядя в диспетчер SDK).

Затем в Управлении, где вы хотите его показать, вы должны импортировать android.support.v7.app.AlertDialog и использовать AlertDialog.Builder точно так же, как вы использовали его раньше.

+0

Я рассматриваю этот вопрос как ответ, хотя появились дополнительные проблемы. Используя класс поддержки для AlertDialog, настройка становится ограниченной, потому что атрибуты цвета, такие как topDark, больше не вступают в силу, либо помещены внутри alertDialogTheme, либо alertDialogStyle. Кроме того, одно и то же решение не может применяться к DatePickerDialog и TimePickerDialog, пока эти классы пока не имеют своей версии поддержки. – Milack27

+0

В этих случаях вы должны продолжать использовать параметры даты и времени по умолчанию, включенные в каждый API, или использовать некоторый [неофициальный обратный порт для них] (https://github.com/SimonVT/android-numberpicker). –

+0

Неофициальный порт может работать, я их никогда не пробовал. Но по умолчанию у них будет такая же проблема. – Milack27

2

Я установил его с помощью кода ниже:

<style name="CustomAppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 
+0

Вот что предложил zgc7009 в первом комментарии. Он работает, если я определяю два стиля XML, по одному для каждого API. Если нет, диалоги будут выглядеть странно на Android Lollipop. Я думаю, что решение joaquin намного проще. – Milack27