Android : Theme.Holo VS Theme.AppCompat

Posted

技术标签:

【中文标题】Android : Theme.Holo VS Theme.AppCompat【英文标题】: 【发布时间】:2016-08-18 16:39:36 【问题描述】:

我使用“@android:style/Theme.Holo”作为我游戏的主题:

但是为了能够设置一个snackbar小部件,我别无选择,只能使用“@style/Theme.AppCompat”,否则我会收到以下错误消息:

You need to use a Theme.AppCompat theme (or descendant) with the design library

问题在于“@style/Theme.AppCompat”在视觉上完全不同:

我可以做些什么来保持与“@android:style/Theme.Holo”相同的视觉效果,但同时能够使用小吃栏小部件?

编辑 使用 Yoann Hercouet 的解决方案,结果如下:

缺少什么?

【问题讨论】:

【参考方案1】:

我终于找到了解决办法:

AndroidManifest.xml

<application
    android:theme="@style/Theme.AppCompat"
    ...

MyDialog.java

new AlertDialog.Builder(new ContextThemeWrapper(context, android.R.style.Theme_Holo_Dialog));

而不是:

new AlertDialog.Builder(context);

【讨论】:

【参考方案2】:

尝试通过更改对话框的默认样式来更新您的应用主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="alertDialogTheme">@android:style/Theme.Holo.Dialog</item>
</style>

编辑

不知道为什么它没有改变任何东西,它适用于我的应用程序,也许可以尝试其他方式并创建自定义样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="alertDialogTheme">@style/myAlertDialogStyle</item>
</style>

<style name="myAlertDialogStyle" parent="android:style/Theme.Holo.Dialog">
    ...
</style>

【讨论】:

没有改变,主题仍然是灰色的,包括对话框。 很奇怪,你必须删除你在对话框本身上应用的任何样式,这个更改会影响所有对话框。 我没有指定任何其他样式。但是,如果我可以将对话框和快餐栏背景调暗一点,那就完美了。 我发现了一个问题,AppTheme 应用的很好,但是 "item name="alertDialogTheme"" 不影响对话框的视觉效果。 我通过导入 android.support.v7.app.AlertDialog 而不是导入 android.app.AlertDialog 解决了这个问题。

以上是关于Android : Theme.Holo VS Theme.AppCompat的主要内容,如果未能解决你的问题,请参考以下文章

Theme.Holo.Light详解

Theme.Holo.Light详解

如何将 Theme.Holo.DialogWhenLarge 设置为自定义大小、位置、边距等?

Android Theme主题继承(SDK下主题和v7包下主题)

如何获得 Theme.Holo.Light.DialogWhenLarge 的深色操作栏?

自定义对话框大小以匹配 Theme.Holo.Light.Dialog