Как избежать применения темы / стиля приложения к AlertDialog и Dialog (особенно для кнопок)? - PullRequest
2 голосов
/ 25 октября 2011

Я определил стиль уровня приложения:

<style name="MyApplicationStyle" parent="@android:style/Theme.Black">
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDy">2</item>
    <item name="android:shadowRadius">1.5</item>

    <item name="android:buttonStyle">@style/MyButton</item>
    <item name="android:editTextStyle">@style/MyEditText</item>
</style>

Этот стиль применяется к моему приложению через узел активности в Manifest.xml:

android:theme="@style/MyApplicationStyle"

Моя проблема в том, что эта тема применяется везде, даже в моих AlertDialog и Dialogs. В этих диалогах применяются только некоторые функции: например, тень применяется к кнопке и тексту. Я позволю себе представить, как трудно было бы реализовать новый класс Dialog со всеми необходимыми функциями или установить для каждой кнопки правильный стиль. Таким образом, предлагаемое решение здесь: Стиль кнопки в AlertDialogs не очень подходит

Есть ли обходной путь, чтобы избежать применения стиля кнопки в диалоге или ручного задания стиля для диалога (использование ContextThemeWrapper не работает)?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Не знаю, поняли ли вы это сейчас, но это внутренние имена атрибутов, используемые для стилизации диалогов (в частности, sdk/platforms/android-14/data/res/values/themes.xml):

<item name="alertDialogStyle">@android:style/AlertDialog</item>
<item name="dialogTheme">@android:style/Theme.Dialog</item>
<item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons</item>
<item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title</item>
<item name="dialogTitleDecorLayout">@layout/dialog_title</item>
<item name="alertDialogTheme">@android:style/Theme.Dialog.Alert</item>
<item name="alertDialogCenterButtons">true</item>
<item name="alertDialogIcon">@android:drawable/ic_dialog_alert</item>
<item name="toastFrameBackground">@android:drawable/toast_frame</item>

Добавление android: перед ними (в большинстве случаев) позволяет вам их переопределить. Я еще не нашел никакой документации для этого, так что если вы столкнетесь с некоторыми, дайте мне знать! Я сделал несколько изящных вещей методом проб и ошибок, переопределив некоторые из них.

Вы можете увидеть, что делает Android сейчас, посмотрев здесь: sdk/platforms/android-14/data/res/values/styles.xml

0 голосов
/ 26 октября 2011

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...