如何在 DarkActionBar 中使用 light Action Mode?

How to use light Action Mode with DarkActionBar?

这是我的主题。我正在使用 DarkActionBar 以便标题、后退按钮和溢出图标为白色而不是黑色。

<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

但是,当文本被选中时,ActionMode/Contextual Action Bar 是 'black' 背景上的白色文本。

当我删除 .DarkActionBar 时,上下文操作栏会在浅灰色上切换为黑色,这对这个应用程序来说更令人愉悦。因此,如果我要走那条路,我需要找到一种不同的方法来使主要操作栏使用白色前景。

如何在 ActionMode/Contextual Action Bar 上获得浅色背景/深色前景,同时在我的主 ActionBar 上仍然有浅色前景?


以下是我根据 Daniel 在评论中的建议尝试的方法:

<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="actionModeStyle">@style/MyTheme.ActionMode</item>
    <item name="actionMenuTextColor">@android:color/black</item>
</style>

<style name="MyTheme.ActionMode" parent="Widget.AppCompat.ActionMode">
    <item name="background">@android:color/white</item>
    <item name="actionMenuTextColor">@android:color/black</item>
    <item name="android:titleTextStyle">@style/MyTheme.ActionMode.TitleText</item>
    <item name="android:subtitleTextStyle">@style/MyTheme.ActionMode.TitleText</item>
</style>

<style name="MyTheme.ActionMode.TitleText">
    <item name="android:textColor">@android:color/black</item>
</style>

不幸的是,我只能改变背景。所有 ActionMode 文本和图标仍然是白色。

我现在要使用 <item name="background">@color/colorPrimary</item>。比黑底好看。

似乎仍然有办法将前景更改为黑色,让我可以使用 Android 的典型 light-gray 背景。

我已经找到了答案,但它非常手动:

可以为您的主题风格的每张图片添加您自己的图形:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <!-- Override the ActionMode Style -->
        <item name="actionModeStyle">@style/ActionMode</item>

        <item name="actionModeCloseDrawable">@drawable/ic_action_navigation_close</item>

        <!-- Styles inherited from the Base Theme -->
        <item name="android:actionModeCutDrawable">@drawable/ic_action_content_content_cut</item>
        <item name="android:actionModeCopyDrawable">@drawable/ic_action_content_content_copy</item>
        <item name="android:actionModePasteDrawable">@drawable/ic_action_content_content_paste</item>
        <item name="android:actionModeSelectAllDrawable">@drawable/ic_action_content_select_all</item>

    </style>
    <!-- Action Mode -->
    <style name="ActionMode" parent="Widget.AppCompat.ActionMode">
        <item name="background">@android:color/white</item>
        <item name="titleTextStyle">@style/TitleTextStyle</item>

    </style>

    <!-- Title text of Contextual action bar-->
    <style name="TitleTextStyle">
        <item name="android:textColor">@android:color/darker_gray</item>
        <item name="android:textSize">18sp</item>
    </style>

</resources>

对我们来说幸运的是,Roman Nurik 组合了一个很好的工具来获取我们需要的所有资产:

http://romannurik.github.io/AndroidAssetStudio/icons-actionbar.html#source.space.trim=1&source.space.pad=0&name=ic_action_example&theme=light&color=33b5e5%2C60

只需使用剪贴画选项(搜索剪切、复制、过去、select 全部和关闭)

祝你好运,编码愉快!