有以下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的预期用例是什么。
发布于 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
,从而使任何文本和图标变得不透明。
发布于 2016-09-06 16:46:02
Theme.AppCompat用于设置整个应用的全局主题。ThemeOverlay.AppCompat用于覆盖(或“覆盖”)特定视图的主题,尤其是工具栏。
让我们看一个例子来说明为什么这是必要的。
带有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>
由于我的原色是深蓝色,我可能应该在操作栏中使用一个使用浅文本颜色的主题,因为黑色文本很难阅读。
隐藏ActionBar并使用工具栏
使用Theme.AppCompat而不是Theme.Material的全部意义在于,这样我们就可以允许旧版本的安卓使用我们的材料设计主题。问题是老版本的安卓不支持ActionBar。因此,documentation建议隐藏ActionBar并在布局中添加工具栏。要隐藏ActionBar,我们必须使用一个NoActionBar
主题。下图显示了隐藏了ActionBar的工具栏。
但是,如果我想要一些类似于带有DarkActionBar的轻量级主题的东西呢?因为我必须使用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应用程序主题。
Theme.AppCompat.Light.NoActionBar
ThemeOverlay.AppCompat.Dark.ActionBar
如果你想让弹出菜单变得轻巧,你可以添加以下内容:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
进一步研究
我通过实验和阅读下面的文章了解到了这一点。
https://stackoverflow.com/questions/27238433
复制相似问题