如何用我的主题指定黑暗的行动模式

我知道有两个关于样式的动作栏的上下文动作栏(ActionMode)的一些问题,但他们似乎并没有解决我之后的东西。

我正在使用带有浅色主题和黑暗操作栏的工具栏。 工具栏看起来像我想要的,但行动模式看起来像普通的黑暗主题。 我需要改变我的风格,以获得黑暗的主题行动模式(不只是行动栏)? 看来我应该能够通过点击进入Theme.AppCompat快速地做到这Theme.AppCompat因为这显示了CAB我想要的,但我不希望其他应用程序变黑。

我只关心API 14+,并使用支持工具栏代替操作栏。

这是我的基本风格

 <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> 

工具栏布局文件(在这里设置popupTheme似乎没有任何影响)。

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" app:theme="@style/AppTheme.Toolbar" app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" android:popupTheme="@style/ThemeOverlay.AppCompat.Dark" android:elevation="2dp" android:focusable="false"/> 

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

风格的工具栏

这是我的ActionMode(我需要反转)

我的行动模式

这是我想要的动作模式看起来像(我通过改变我的风格从Theme.AppCompat而不是Theme.AppCompat.Light.DarkActionBarinheritance而来的。问题是,其余的应用程序变暗,我不想。

黑暗的行动模式

Solutions Collecting From Web of "如何用我的主题指定黑暗的行动模式"

首先在基本主题中重写属性actionModeStyle

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

定义LStyled.ActionMode为:

 <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> 

这将覆盖标题和副标题的主题指定文本颜色(如果需要)。

剩下的就是溢出button。 启动任何支持颜色replace的图像编辑软件。 使用AppCompat的res/drawable-XXXX文件夹中的溢出菜单png。 把它涂成白色。 接下来,在基本主题中覆盖actionOverflowButtonStyle并指定刚刚修改的png:

 <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> 

没有什么解释/教程,我可以提供有关主题的自定义。 唯一的方法是从框架中浏览[styles] [themes] .xml文件。 阅读源代码也有帮助 – 您将会知道正在使用哪些属性以及在何处/如果可以自定义。

值得一提的是:

我希望能够扩展风格,以获得与黑暗主题相同的行为。

是的,但这可能是不希望的。 上面那部分涉及修改溢出菜单图标的部分可以被覆盖的colorControlNormal属性替代。 TintManager ( 链接 )使用来自colorControlNormal的颜色值来为可绘制的溢出菜单着色(以及其他可绘制的)。 看看源代码中的TINT_COLOR_CONTROL_NORMAL数组的内容。 但是重写colorControlNormal来修复一个drawable可能会改变应用程序的整体外观和感觉。

看看这个博客文章,解释如何设置工具栏的风格是黑暗的:

http://android-developers.blogspot.ie/2014/10/appcompat-v21-material-design-for-pre.html

 <android.support.v7.widget.Toolbar android:layout_height=”wrap_content” android:layout_width=”match_parent” android:minHeight=”@dimen/triple_height_toolbar” app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

您指定一个工具栏“样式”。 我想你错过的是应用程序名称空间的“主题”属性,它将样式应用于工具栏及其所有子项。

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

 <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> 

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

在动作模式中定义这些button的颜色的“colorControlNormal”项必须放置在动作栏主题中 ,而不是动作模式样式中。 只有这样才能在动作模式下用于溢出,完成,closures和后退button。

尝试使用

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

代替。