Android 如何使用我的主题指定黑暗动作模式

Android 如何使用我的主题指定黑暗动作模式,android,android-actionbar,android-toolbar,android-actionmode,Android,Android Actionbar,Android Toolbar,Android Actionmode,我知道有几个问题是关于动作栏的上下文动作栏(动作模式)的样式设计,但它们似乎并没有完全解决我想要的 我正在使用带有浅色主题和深色操作栏的工具栏。工具栏看起来像我想要的,但动作模式看起来像常规的黑色主题。我需要改变什么样的风格才能获得黑色主题的动作模式(不仅仅是动作条)?似乎我应该能够通过点击Theme.AppCompat快速完成这项工作,因为这显示了我想要的CAB,但我不希望应用程序的其余部分变暗 我只关心API14+并使用支持工具栏代替操作栏 这是我的基本风格 <style name="

我知道有几个问题是关于动作栏的上下文动作栏(动作模式)的样式设计,但它们似乎并没有完全解决我想要的

我正在使用带有浅色主题和深色操作栏的工具栏。工具栏看起来像我想要的,但动作模式看起来像常规的黑色主题。我需要改变什么样的风格才能获得黑色主题的动作模式(不仅仅是动作条)?似乎我应该能够通过点击
Theme.AppCompat
快速完成这项工作,因为这显示了我想要的CAB,但我不希望应用程序的其余部分变暗

我只关心API14+并使用支持工具栏代替操作栏

这是我的基本风格

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:actionModeBackground">@color/colorActionMode</item>
    <item name="android:windowActionModeOverlay">true</item>
</style>

@颜色/原色
@颜色/原色暗
@颜色/颜色操作模式
真的
工具栏样式

<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
    <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item>
    <item name="android:textColorSecondary">@color/abc_primary_text_material_dark</item>
    <item name="android:background">@color/colorPrimaryDark</item>
</style>

@颜色/abc\u主要\u文本\u材质\u深色
@颜色/abc\u主要\u文本\u材质\u深色
@颜色/abc\u主要\u文本\u材质\u深色
@颜色/原色暗
工具栏布局文件(在这里设置popupTheme似乎没有任何效果)


这是我的工具栏(这是我想要的)

这是我的动作模式(我需要反转)

下面是我想要ActionMode的样子(通过将样式更改为继承自
Theme.AppCompat
,而不是
Theme.AppCompat.Light.darkaActionBar
),我得到了它。问题是应用程序的其余部分变暗了,这是我不想要的


查看这篇博客文章,它解释了如何将工具栏设置为黑色:


您指定了一个工具栏“样式”。我认为您缺少的是应用程序名称空间的“主题”属性,该属性将样式应用于工具栏及其所有子项

编辑:这应该适用于您的具体情况

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:actionModeBackground">@color/colorActionMode</item>
    <item name="android:windowActionModeOverlay">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>
<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
    <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item>
    <item name="android:textColorSecondary">@color/abc_primary_text_material_dark</item>
    <item name="android:background">@color/colorPrimaryDark</item>
</style>

@颜色/原色
@颜色/原色暗
@颜色/颜色操作模式
真的
真的
假的
@颜色/abc\u主要\u文本\u材质\u深色
@颜色/abc\u主要\u文本\u材质\u深色
@颜色/abc\u主要\u文本\u材质\u深色
@颜色/原色暗

从基本主题中的覆盖属性
actionModeStyle
开始:

<item name="actionModeStyle">@style/LStyled.ActionMode</item>
最后:

<style name="LStyled.ActionMode.Title" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Title">
    <item name="android:textColor">@color/color_action_mode_text</item>
</style>

<style name="LStyled.ActionMode.Subtitle" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle">
    <item name="android:textColor">@color/color_action_mode_text</item>
</style>
关于主题的定制,我没有太多的解释/教程可以提供。了解主题的唯一方法是浏览框架中的[styles][themes].xml文件。阅读源代码也会有所帮助-您将了解正在使用哪些属性以及它们在何处/是否可以定制

要点:

我希望能够扩展一种样式,以获得与 内置于黑暗主题中


是的,但这可能不是必需的。上面涉及修改溢出菜单图标的部分可以用覆盖的
colorControlNormal
属性替换。
TintManager
()使用
colorControlNormal
中的颜色值为溢出菜单可绘制(以及其他可绘制)着色。看看源代码中数组
TINT\u COLOR\u CONTROL\u NORMAL
的内容。但是覆盖
colorControlNormal
来修复一个可绘制的可能会使应用程序的整体外观和感觉变得更糟。

我只想添加到Vikram的答案中,具体到为操作中的溢出按钮和其他默认控件着色模式

定义动作模式中这些按钮颜色的“colorControlNormal”项必须放在动作栏主题中,而不是动作模式样式中。只有这样,它才会用于动作模式中的溢出、完成、关闭和返回按钮。

尝试使用

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

假的
真的

相反。

我已经为工具栏设置了主题,我将在问题中添加我的工具栏声明。设置popupTheme似乎没有任何效果。我尝试过app.popupTheme和android:popupTheme。我有相同的设置,我的应用主题继承自
theme.AppCompat.Light.NoActionBar
,我的工具栏主题继承自
ThemeOverlay.AppCompat.Dark.ActionBar
如我在回答中所述。不幸的是,这些样式基本上与我已有的样式相同。
Theme.AppCompat.Light.NoActionBar
只添加了我在样式中已有的内容,而工具栏的
Dark.ActionBar
主题没有任何改变。当我尝试你在那里,我得到了和我原来一样的结果。是的,我在
NoActionBar
上得到了你的观点,但是
ThemeOverlay.AppCompat.Dark.ActionBar
应该是这里的关键。只要检查一下,你就会发现它是从
ThemeOverlay
开始的,而不仅仅是
Theme
对吗?是的,我复制并粘贴了你在那里的东西。它在我看来,ActionMode部分和工具栏是完全分开的。工具栏看起来很棒,因为它的meOverlay.AppCompat.Dark.ActionBar,但它在切换到ActionMode时似乎不会继续。谢谢你的回答,但我正在寻找一种扩展内置样式的方法。我知道我可以替换溢出的icon(以及“主页为上”图标),但我希望避免这样做,而只是使用内置样式。@Spencer我只知道这个“解决方法”。如果我发现一些优雅的东西,我会更新我的答案(并留下评论)。但是,我在发布答案之前做了研究。系统似乎不支持您所寻找的内容(然而?)。你在这里给出的答案基本上是我在这里提问之前所做的(我还必须修改“home as up”(主页为启动)图标。我希望我可以让系统完成所有这些,以及添加RTL支持等等,但我也不知道如何做。不过,谢谢你的想法。
<style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="titleTextStyle">@style/LStyled.ActionMode.Title</item>
    <item name="subtitleTextStyle">@style/LStyled.ActionMode.Subtitle</item>
</style>
<style name="LStyled.ActionMode.Title" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Title">
    <item name="android:textColor">@color/color_action_mode_text</item>
</style>

<style name="LStyled.ActionMode.Subtitle" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle">
    <item name="android:textColor">@color/color_action_mode_text</item>
</style>
<item name="actionOverflowButtonStyle">@style/LStyled.OverFlow</item>

<style name="LStyled.OverFlow" parent="@style/Widget.AppCompat.ActionButton.Overflow">
    <item name="android:src">@drawable/modified_overflow_icon</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>