Android - 主题警报对话框

时间:2017-08-14 00:25:47

标签: android android-theme android-styles

我目前正在尝试在我的应用程序中实现主题,并且在尝试设置Dialogs样式时遇到了问题。

<style name="MyTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="android:colorBackground">@color/background</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    ...
    <!-- AppCompat Dialog Attributes -->
    <item name="dialogTheme">@style/AppCompatDialog</item>
    <item name="alertDialogTheme">@style/AppCompatAlert</item>
</style>

例如,MyTheme正确设置colorPrimary和colorBackground,它在应用程序的大多数区域都能正常工作。当我需要引用它们时,我会像这样使用它们。

<LinearLayout
android:background="?android:colorBackground"
...>

    <TextView
    android:id="@+id/title"
    style="@style/TextAppearance.AppCompat.Display1"
    android:background="?attr/colorPrimary"
    ... />

但是,当我设置我的dialogTheme和alertDialogTheme样式时,颜色似乎默认为其他颜色。

<style name="MyAlertDialogStyle" parent="Base.Theme.AppCompat.Dialog">
    ...
    <item name="android:background">?android:colorBackground</item>
</style>

这不会使用我定义的colorBackground,而是使用浅灰色(默认?)颜色。

Example of styling

以下是结果示例。

<style name="MyAlertDialogStyle" parent="Base.Theme.AppCompat.Dialog">
    <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
    <!-- Used for the buttons -->
    <item name="android:colorAccent">?colorAccent</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">?colorAccent</item>
    <!-- Used for the background -->
    <item name="android:background">?android:colorBackground</item>
</style>

左侧(&#34; Desired&#34;)使用正常颜色,例如@color/colorAccent,右侧(&#34;结果&#34;)如果我尝试使用主题会发生什么颜色?colorAccent

如何正确引用主题的主题颜色?

另外,有些相关的问题,我试图设置我的工具栏,但它没有效果。

<style name="MyTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar" >
    ...
    <item name="toolbarStyle">@style/toolbarStyle</item>
</style>

<style name="toolbarStyle" parent="Base.Widget.AppCompat.Toolbar">
    <item name="android:background">@drawable/header_background</item>
</style>

知道为什么这不起作用吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

通过在“活动”的主题中设置此属性,我至少能够使API> = 23中的对话框背景成为主题:

<style name="AppTheme" parent="Theme.AppCompat">
  <item name="android:colorBackgroundFloating">@color/gunmetal</item>
</style>

然后确保您的活动在AndroidManifest.xml中使用了它:

<activity
        android:name="package.your.YourActivity"
        android:theme="@style/AppTheme"
...

答案 1 :(得分:0)

扩展DialogFragment时,请在主题中使用AppCompatDialogFragment

<style name="YourAppTheme" parent="Theme.AppCompat">
    <item name="colorBackgroundFloating">your_desired_color</item>
</style>

,不带android前缀。

经过API 21+测试