16

我正在创建一个支持级别 api 为 7 的 android 应用程序,所以我使用的是 sherlock 操作栏。我在其中使用动作模式。问题是我想改变动作模式的背景。所以我试过了

    <item name="android:background">@color/something</item>
    <item name="android:backgroundStacked">@color/something</item>
    <item name="android:backgroundSplit">@color/something</item>

这些风格的解决方案是可用的,但它们都不起作用。 在此处输入图像描述

4

9 回答 9

35

就我而言,我解决了这个问题。首先,我创建了一个样式来定义 actionModeBackground:

<style name="MyTheme.ActionMode" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionModeBackground">#FFFFFF</item>
</style>

然后我将样式添加到我的基本应用程序主题中:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionModeStyle">@style/MyTheme.ActionMode</item>
</style>

希望能帮助到你!!!

于 2014-05-20T20:35:59.603 回答
18

如果您想更改 ActionBar 的颜色,只需执行以下操作:

 ActionBar bar = getActionBar();
 bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

有关更多信息,请参阅以下链接

如果您使用 ActionMode,这是用于任何 ActionMode 的样式。您需要创建自己的样式来自定义它

<style name="Widget.ActionMode">
<item name="android:background">?android:attr/actionModeBackground</item>
<item name="android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="android:height">?android:attr/actionBarSize</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>

更多信息在这个网站

也看到这个

编辑

对于 pre-Honeycomb ,请参阅

也许这个这个对你有帮助

于 2013-12-25T05:23:48.580 回答
16

如果您使用的是简单的操作栏,那么试试这个,

ActionBar abar = getActionBar();
abar.setBackgroundDrawable(new ColorDrawable(0xff123456));

但是如果你使用的是Actionbar 共享锁库,那么试试这个

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff123456));

ColorDrawable(0xff123456)- 应该是您的颜色代码。

可绘制/styles.xml

 <item name="android:actionModeBackground">@drawable/actionbar_background</item>
 <item name="actionModeBackground">@drawable/actionbar_background</item>

根据 API 级别更改主题

如果您想根据 API 级别进行更改,那么您应该这样做

于 2013-12-25T05:30:12.520 回答
3

如果您想以编程方式执行此操作(支持 AppCompat),您需要查找图标父视图。此代码从 2.3.7 测试到 6.0.1。您需要检查较低的 API...。

首先获取您的活动装饰视图

final ViewGroup  decorView = (ViewGroup) getActivity().getWindow().getDecorView();

第二个在 onPrepareActionMode 中设置颜色。您还可以在此处设置后退图标或其他元素

@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) 
{

     decorView.postDelayed(new Runnable() {

     @Override
     public void run() 
     {
        int buttonId = getResources().getIdentifier("action_mode_close_button", "id", "android");

        View v = decorView.findViewById(buttonId);
        if (v == null)
        {
           buttonId = R.id.action_mode_close_button;
            v = decorView.findViewById(buttonId);   
        }

        if (v != null)
        {                         
           ((View)v.getParent()).setBackgroundColor(Color.red /*your color here*/);
        }               
     }   
     }, 500);}
于 2016-10-20T19:32:23.297 回答
2

在您的自定义主题中覆盖此样式:

<style name="Base.Widget.AppCompat.ActionMode" parent="">
    <item name="background">?attr/actionModeBackground</item>
    <item name="backgroundSplit">?attr/actionModeSplitBackground</item>
    <item name="height">?attr/actionBarSize</item>
    <item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Title</item>
    <item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle</item>
    <item name="closeItemLayout">@layout/abc_action_mode_close_item_material</item>
</style>

例如:

<style name="LywActionMode" parent="Base.Widget.AppCompat.ActionMode">
    <item name="background">@color/lyw_primary_color</item>
    <item name="backgroundSplit">@color/lyw_primary_color</item>
</style>

<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light">
    ...
    <item name="actionModeStyle">@style/LywActionMode</item>
</style>
于 2015-03-18T17:56:44.537 回答
1

这是用于任何 ActionMode 的样式,我从 SDK 中提取了它。您需要创建自己的样式来自定义它。这真的很容易做到。如果您以前从未做过类似的事情,您应该阅读这篇关于自定义 ActionBar 的帖子。它解释了你需要知道的一切。

<style name="Widget.ActionMode">
<item name="android:background">?android:attr/actionModeBackground</item>
<item name="android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="android:height">?android:attr/actionBarSize</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>
于 2013-12-25T05:31:54.800 回答
1

对于那些仍在挣扎并且现有解决方案都没有帮助的人,请确保在您的带有工具栏的布局中具有以下内容:

app:popupTheme="@style/Theme.ToolBar"
android:popupTheme="@style/Theme.ToolBar"

而你没有

app:theme="@style/Theme.ToolBar"

因为它们会引发冲突,并且您的自定义将不起作用。

于 2017-03-23T19:28:01.473 回答
1

最简单的方法

ActionBarContextView actionBar = getWindow().getDecorView().findViewById(R.id.action_mode_bar);
    actionBar.setBackgroundColor(WhateverColorYouWant);
于 2017-08-30T08:32:53.643 回答
-1

我想让这个答案更清楚。首先在您的可绘制文件夹中创建自定义背景“storage_list_header_shape.xml”。

<?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle" >

   <gradient
      android:angle="270"
      android:startColor="@android:color/holo_orange_light"
      android:centerColor="@android:color/holo_orange_dark"
      android:endColor="@android:color/holo_orange_light" />

   <size android:height="3dp" />

 </shape>

其次,在您的 style.xml 中创建自定义样式

<style name="customActionModeTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionModeBackground">@drawable/storage_list_header_shape</item>
</style>

第三,调用清单中的样式。

<activity
     android:name="com.javacafe.activities.Main"
     android:launchMode="singleTop"
     android:screenOrientation="sensorLandscape"
     android:theme="@style/customActionModeTheme" >
</activity>
于 2014-04-04T06:51:27.110 回答