Android 什么时候应该使用Theme.AppCompat与ThemeOverlay.AppCompat?
有以下Theme.AppCompat类:Android 什么时候应该使用Theme.AppCompat与ThemeOverlay.AppCompat?,android,android-theme,Android,Android Theme,有以下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
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.Light
ThemeOverlay.AppCompat.Dark
ThemeOverlay.AppCompat.ActionBar
ThemeOverlay.AppCompat.Dark.ActionBar
以及以下ThemeOverlay.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.Light
ThemeOverlay.AppCompat.Dark
ThemeOverlay.AppCompat.ActionBar
ThemeOverlay.AppCompat.Dark.ActionBar
例如,为什么要使用ThemeOverlay.AppCompat.light和Theme.AppCompat.light?我发现为MeoOverlay定义的属性要少得多——我很好奇MeoOverlay的预期用例是什么。根据AppCompat的创建者所述:
[ThemeOverlays]是覆盖普通主题的特殊主题。材质主题,覆盖相关属性使其变为浅/暗
ThemeOverlay+操作栏
目光敏锐的您也会看到ActionBar ThemeOverlay衍生品:
ThemeOverlay.Material.Light.ActionBar
ThemeOverlay.Material.Dark.ActionBar
actionBarTheme
属性与操作栏一起使用,或者直接在工具栏上设置
他们目前对父母唯一不同的做法是将colorControlNormal
更改为android:textColorPrimary
,从而使任何文本和图标不透明
Theme.AppCompat用于设置整个应用程序的全局主题。ThemeOverlay.AppCompat用于覆盖(或“覆盖”)特定视图的主题,尤其是工具栏 让我们看一个例子来说明为什么这是必要的 带有ActionBar的应用程序主题 ActionBar通常显示在应用程序中。我可以通过设置
colorPrimary
值来选择它的颜色。但是,更改主题会更改操作栏上文本的颜色
<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>
这最终使我们能够达到我们想要的效果。Dark.ActionBar主题与Light应用程序主题重叠,用于此特定场合
- 应用程序主题:
Theme.AppCompat.Light.NoActionBar
- 工具栏主题:
ThemeOverlay.AppCompat.Dark.ActionBar
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
进一步研究
我通过实验和阅读以下文章了解到了这一点