Пользовательский диалог оповещения выглядит странно на Android 4.x

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

RES / значения /themes.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 за диалогом появляется белый прямоугольник. Вот как это выглядело:

введите описание изображения здесь

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

Спасибо!

3 ответа

Решение

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

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

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

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

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

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

Для тех из вас, кто использует AndroidX, вы захотите использовать следующий импорт:

import androidx.appcompat.app.AlertDialog
  1. добавлять appcompat зависимость от вашего сценария сборки:

    implementation 'com.android.support:appcompat-v7:27.1.1'

  2. Заменить все использования android.app.AlertDialog с android.support.v7.app.AlertDialog,

Другие вопросы по тегам