Android v21主题中的Theme.Appcompat颜色强调被忽略,在对话框上没有填充

52

我正在使用 Android 5 SDK 中的 ActionBarActivity,这是我的 v21 的 theme.xml

<style name="AppTheme_Light" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/abc1</item>
    <item name="android:colorPrimaryDark">@color/abc2</item>
    <item name="android:colorAccent">@color/abc3</item>
</style>

但是颜色被忽略了,取而代之的是默认的青色,并且所有对话框都没有填充。

问题

另外,在其他地方如自定义提示中也会忽略填充,这个问题只出现在棒棒糖设备上。

编辑:

填充问题是由于fitsSystemWindow引起的,我使用这个问题解决了它。

但是强调颜色问题仍然存在,它不仅影响对话框,还影响整个应用程序。

3个回答

128

关于强调色。您正在使用AppCompat主题,因此应该从主题中删除Android命名空间。

<style name="AppTheme_Light" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/abc1</item>
    <item name="colorPrimaryDark">@color/abc2</item>
    <item name="colorAccent">@color/abc3</item>
</style>

关于对话框,AppCompat不支持它(据我所知)。 你可以尝试在values-v21文件夹中使用这个样式:

<style name="Theme" parent="FrameworkRoot.Theme">
    <item name="android:alertDialogTheme">@style/Theme.AlertDialog</item>
</style>

<style name="Theme.AlertDialog" parent="android:Theme.Material.Light.Dialog.Alert">
    <item name="android:colorPrimary">@color/demo_primary_color</item>
    <item name="android:colorPrimaryDark">@color/demo_colorPrimaryDark</item>
    <item name="android:colorAccent">@color/theme_accent_1</item>
</style>

更新于2015年4月23日:支持库版本22.1

新的support library v22.1可以与对话框(Dialog)一起使用。 您可以使用android.support.v7.app.AlertDialog或新的AppCompatDialog

例如:

import android.support.v7.app.AlertDialog

AlertDialog.Builder builder =
       new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
            builder.setTitle("Dialog");
            builder.setMessage("Lorem ipsum dolor ....");
            builder.setPositiveButton("OK", null);
            builder.setNegativeButton("Cancel", null);
            builder.show();

并且使用像这样的样式:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">#FFCC00</item>
    <item name="android:textColorPrimary">#FFFFFF</item>
    <item name="android:background">#5fa3d0</item>
</style>
否则,您可以在当前主题中定义:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- your style -->
    <item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>

然后在你的代码中:

 import android.support.v7.app.AlertDialog

    AlertDialog.Builder builder =
           new AlertDialog.Builder(this);

4
首先,能够得到cards-lib的创建者回答我的问题是一种荣幸。填充问题是由于'fitsSystemWindow'引起的,并且我通过这个问题找到了解决方法。编辑:关于强调颜色,不仅限于对话框,在其他地方也被忽略了。 - k1slay
1
仅供参考,以防其他人遇到此问题。我遇到了colorPrimary的问题。我删除了android:后,它可以正常工作,否则它不起作用。其他值都能正常工作,不确定为什么这个出了问题。 - Hatem Jaber
2
@GabrieleMariotti请注意,如果您在应用程序主题中定义了alertDialogTheme属性,则无需将样式传递给AlertDialog.Builder。 请参见此处 - JJD
3
在Android 4.2.2上,对话框和对话框背景的外观与Lollipop不同,为什么? - Ram

22

更新

我成功地为appCompat对话框主题应用了颜色,这可能对某些人有帮助:

values/style.xml

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">

...

/* for android 4 - 4.4, we not define alert dialogs style */

</style>

values-v21/style.xml

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">

...

/* define alert dialog style for android 5 */
<item name="android:alertDialogTheme">@style/Theme.AlertDialog</item>

</style>

 <style name="Theme.AlertDialog" parent="Theme.AppCompat.Light.Dialog">

    <!--app abar color in Activties Task manager -->
    <item name="colorPrimary">@color/my_color</item>

    <!--copy/paste colors -->
    <item name="colorAccent">@color/my_color</item>

    <!--status bar color -->
    <item name="colorPrimaryDark">@color/my_color</item>


</style>

1
除非我显式地应用它,否则这对我不起作用!在初始化ProgressDialog时使用代码。 - Pinser

8

感谢你的提及! - afollestad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接