gpt4 book ai didi

android - 什么时候应该使用 Theme.AppCompat 与 ThemeOverlay.AppCompat?

转载 作者:IT老高 更新时间:2023-10-28 13:04:20 28 4
gpt4 key购买 nike

有以下 Theme.AppCompat 类:

Theme.AppCompat
Theme.AppCompat.Light
Theme.AppCompat.Light.DarkActionBar
Theme.AppCompat.NoActionBar
Theme.AppCompat.Light.NoActionBar
Theme.AppCompat.DialogWhenLarge
Theme.AppCompat.Light.DialogWhenLarge
Theme.AppCompat.Dialog
Theme.AppCompat.Light.Dialog
Theme.AppCompat.CompactMenu

以及以下 ThemeOverlay.AppCompat 类:

ThemeOverlay.AppCompat
ThemeOverlay.AppCompat.Light
ThemeOverlay.AppCompat.Dark
ThemeOverlay.AppCompat.ActionBar
ThemeOverlay.AppCompat.Dark.ActionBar

例如,为什么要使用 ThemeOverlay.AppCompat.light 与 Theme.AppCompat.Light?我看到为 ThemeOverlay 定义的属性要少得多——我很好奇 ThemeOverlay 的预期用例是什么。

最佳答案

Theme.AppCompat 用于为整个应用设置全局主题。 ThemeOverlay.AppCompat 用于覆盖(或“覆盖”)特定 View 的主题,尤其是工具栏。

让我们看一个例子来说明为什么这是必要的。

带有 ActionBar 的应用主题

ActionBar 通常显示在应用程序中。我可以通过设置 colorPrimary 值来选择它的颜色。但是,更改主题会更改 ActionBar 上文本的颜色。

<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

enter image description here

由于我的原色是深蓝色,我可能应该在操作栏中使用浅色文本颜色的主题之一,因为黑色文本很难阅读。

隐藏 ActionBar 并使用工具栏

使用 Theme.AppCompat 而不是 Theme.Material 的全部意义在于,我们可以允许旧版本的 Android 使用我们的 Material Design 主题。问题是旧版本的 Android 不支持 ActionBar。因此,documentation建议隐藏 ActionBar 并将 Toolbar 添加到您的布局中。要隐藏 ActionBar,我们必须使用 NoActionBar 主题之一。下图显示了隐藏 ActionBar 的工具栏。

enter image description here

但是,如果我想要带有 DarkActionBar 的 Light 主题怎么办?因为我必须使用 NoActionBar,所以这不是一个选项。

覆盖应用主题

这就是 ThemeOverlay 的用武之地。我可以在我的 Toolbar xml 布局中指定 Dark ActionBar 主题。

<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

这最终可以让我们得到我们想要的效果。 Dark.ActionBar 主题覆盖此特定场合的 Light 应用主题。

enter image description here

  • 应用主题:Theme.AppCompat.Light.NoActionBar
  • 工具栏主题:ThemeOverlay.AppCompat.Dark.ActionBar

如果您希望弹出菜单更轻,可以添加:

app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

进一步研究

我通过实验和阅读以下文章了解到这一点。

关于android - 什么时候应该使用 Theme.AppCompat 与 ThemeOverlay.AppCompat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com