首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候应该使用Theme.AppCompat而不是ThemeOverlay.AppCompat?

什么时候应该使用Theme.AppCompat而不是ThemeOverlay.AppCompat?
EN

Stack Overflow用户
提问于 2014-12-02 06:20:16
回答 2查看 60.4K关注 0票数 120

有以下Theme.AppCompat类:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
ThemeOverlay.AppCompat
ThemeOverlay.AppCompat.Light
ThemeOverlay.AppCompat.Dark
ThemeOverlay.AppCompat.ActionBar
ThemeOverlay.AppCompat.Dark.ActionBar

例如,为什么要使用ThemeOverlay.AppCompat.light和Theme.AppCompat.Light呢?我发现为ThemeOverlay定义的属性要少得多--我很好奇ThemeOverlay的预期用例是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-02 06:28:44

根据AppCompat的创建者的此Theme vs Style blog post

ThemeOverlays是覆盖普通Theme.Material主题的特殊主题,覆盖相关属性以使其变亮/变暗。

ThemeOverlay + ActionBar

眼尖的人还会看到ActionBar ThemeOverlay衍生品:

  • ThemeOverlay.Material.Light.ActionBar
  • ThemeOverlay.Material.Dark.ActionBar

它们只能通过新的actionBarTheme属性与动作栏一起使用,或者直接在工具栏上设置。

它们当前唯一与父级不同的是,它们将colorControlNormal更改为android:textColorPrimary,从而使任何文本和图标变得不透明。

票数 72
EN

Stack Overflow用户

发布于 2016-09-06 16:46:02

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

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

带有ActionBar的应用程序主题

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

代码语言:javascript
复制
<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>

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

隐藏ActionBar并使用工具栏

使用Theme.AppCompat而不是Theme.Material的全部意义在于,这样我们就可以允许旧版本的安卓使用我们的材料设计主题。问题是老版本的安卓不支持ActionBar。因此,documentation建议隐藏ActionBar并在布局中添加工具栏。要隐藏ActionBar,我们必须使用一个NoActionBar主题。下图显示了隐藏了ActionBar的工具栏。

但是,如果我想要一些类似于带有DarkActionBar的轻量级主题的东西呢?因为我必须使用NoActionBar,所以这不是一个选择。

覆盖应用程序主题

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

代码语言:javascript
复制
<android.support.v7.widget.Toolbar
    ...
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

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

Theme.AppCompat.Light.NoActionBar

  • Toolbar主题:ThemeOverlay.AppCompat.Dark.ActionBar

  • 应用主题

如果你想让弹出菜单变得轻巧,你可以添加以下内容:

代码语言:javascript
复制
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

进一步研究

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

票数 170
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27238433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档