Android 5.0 Lollipop 中的 ActionMode ActionBar 样式(带有 AppCompat)

Posted

技术标签:

【中文标题】Android 5.0 Lollipop 中的 ActionMode ActionBar 样式(带有 AppCompat)【英文标题】:Styling ActionMode ActionBar in Android 5.0 Lollipop (with AppCompat) 【发布时间】:2015-01-15 13:26:21 【问题描述】:

我使用本教程为 Lollipop 改造了我的 Holo 应用程序: http://android-developers.blogspot.ru/2014/10/appcompat-v21-material-design-for-pre.html

我有什么:

    主题

    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="windowActionModeOverlay">true</item>
      <item name="colorPrimary">@color/theme_primary</item>
      <item name="colorPrimaryDark">@color/theme_primary_dark</item>
      <item name="colorAccent">@color/theme_accent</item>
    </style>
    

    工具栏布局

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:id="@+id/toolbar"
      android:layout_
      android:layout_
      android:minHeight="?attr/actionBarSize"
      android:background="?attr/colorPrimary"
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    

    多选模式下继承自ActionBarActivity的带有ListFragment片段的Activity

    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

结果:工具栏正常。它使用指定的主题颜色,但 ActionMode 中 ListFragment 使用的 ActionBar(通过长按列表项激活)具有标准的 Dark.ActionBar 颜色。操作栏的弹出菜单也使用了深色主题。

我尝试了所有的 SO 技巧,但仍然无法解决。我将不胜感激。

顺便说一句。我发现ActionBar的颜色较深是由工具栏的app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"引起的,但不知道如何解决,因为正确的工具栏外观需要这个属性。

【问题讨论】:

【参考方案1】:

只需将这两行添加到主题中:

<item name="actionModeBackground">@color/theme_primary_dark</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>

【讨论】:

在这个问题上花了很多时间之后,这确实有效。谢谢! 浪费了很多时间试图让它工作,只是意识到,为了让它在 AppCompat 的工具栏中工作,你必须删除 "android:" 项目名称的一部分。希望这可以帮助任何其他阅读此主题的人:) 谢谢!状态栏颜色呢?当actionmode 显示时它变白了?【参考方案2】:

如果您想更好地控制每种颜色,除了@Andrey Shcherbakov 的回答之外,这也可能会有所帮助。

<!-- action bar title text color, icon color (ie: back icon, icons when editing text)-->
<item name="android:textColorPrimary">#FFFF00</item>

<!-- action bar background color-->
<item name="android:colorBackground">#444400</item>

<!-- color of line under contextual action bar-->
<item name="colorControlActivated">#00CC00</item>

【讨论】:

以上是关于Android 5.0 Lollipop 中的 ActionMode ActionBar 样式(带有 AppCompat)的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient 在 Android 5.0 Lollipop 中因握手失败而失败

Android 5.0 Lollipop介绍

4.4 kitkat 中的 NoClassDefFoundError 但不在 5.0 Lollipop 中 - 找不到类

Android 5.0 Lollipop 上的 UnsatisfiedLinkError

在 Android 5.0 Lollipop 上不支持 calendarViewShown

应用程序如何检测状态栏颜色(Android 5.0 Lollipop)?