AppCompat Тема диалога с разноцветным заголовком - ошибка?

У меня есть LoginActivity где я использую AppCompat тема как эта:

 <activity
            android:name=".LoginActivity"
            android:theme="@style/Theme.AppCompat.Light.Dialog"
            android:label="Login" />

Мне известно, что на данный момент Google еще не добавил Темы материалов в библиотеку AppCompat для DIALOGS, поэтому я предположил, что это будет сделано в Holo. Вместо этого вот что я получаю:

Имейте в виду, я не использую AppCompattoolBar, в ActivityЯ даже не ссылаюсь на ActionBar, То, что вы видите выше, является поведением по умолчанию, но я не могу понять, откуда оно. Возможно, это ошибка?

(Так же EditText поля не окрашены основным цветом для приложения.)

1 ответ

Примечание: см. Мое окончательное редактирование для, возможно, лучшего решения

Для чего это стоит, я думаю, что это ошибка. Тем не менее, действительный обходной путь, который я обнаружил, заключается в использовании @style/Base.Theme.AppCompat.Light.Dialog.FixedSize, На основании вашего скриншота я думаю, что это будет работать и для вас. Тем не менее, я еще не тестировал окраску палитры.

Из того, что я могу сказать в своем тестировании, это расширяет серую границу, в то же время позволяя вам использовать AppCompat и v21.

Изменить: один побочный эффект в том, что теперь кажется, что все действия диалога имеют одинаковый размер, который может не работать для вас. Кроме того, я не выяснил, как удалить заголовок - requestWindowFeature и supportRequestWindowFeature с Window.FEATURE_NO_TITLE, кажется, вызывает

java.lang.RuntimeException: Unable to start activity ComponentInfo{myclass}:
android.util.AndroidRuntimeException: requestFeature() must be called before adding content

хотя я пробовал это до и после super.onCreate и определенно перед setContentView

Редактирование #2: удаление заголовка с помощью XML-темы работает, и, поскольку у вас нет заголовка, нет никакого странного серого прямоугольника, о котором можно беспокоиться, что означает, что вы можете удалить параметр FixedSize, и диалоговое окно будет обернуть его содержимое, как в предыдущих версиях.

<style name="MyActivityDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

Редактирование № 3: Вы также можете просто удалить серый фон - это может быть лучшим решением, потому что оно не требует базы. префикс:

<style name="MyTitledActivityDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowTitleBackgroundStyle">@android:color/transparent</item>
    <item name="windowActionBar">false</item>
</style>
Другие вопросы по тегам