如何在Android中更改ActionMode背景颜色

时间:2013-12-25 05:22:57

标签: android android-actionbar actionbarsherlock android-actionmode actionmode

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

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

这些样式解决方案可用,但它们都不起作用。 http://i43.tinypic.com/2nriic1.png

9 个答案:

答案 0 :(得分:30)

在我的情况下,我解决了这个问题。首先,我创建了一个样式来定义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>

希望它有所帮助!!!

答案 1 :(得分:16)

如果你想改变ActionBar的颜色,只需这样做:

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

请参阅以下link了解详情

如果您使用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>

this site

中的更多信息

另见this

修改

预蜂窝见this

可能thisthis帮助您

答案 2 :(得分:16)

如果您使用的是简单的Action Bar,请尝试使用

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

但如果您使用的是Actionbar share lock Lib,请尝试使用

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

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

Drawable / styles.xml

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

根据API级别更改主题

如果您想根据API级别进行更改,那么您应该转到this

答案 3 :(得分:3)

If you want to do it programmatically (supporting AppCompat) you need to look for icon parent view. This code is tested from 2.3.7 to 6.0.1. You need to check on lower API... .

first get your activity decor view

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

second set the color in onPrepareActionMode. You can also set the back icon or other elements here

@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);}

答案 4 :(得分: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>

答案 5 :(得分:1)

这是用于任何ActionMode的样式,我从SDK中取出它。您需要创建自己的样式来自定义它。这很容易做到。如果您之前从未做过这样的事情,那么您应该通过this post阅读自定义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>

答案 6 :(得分:1)

最简单的方法

ListView

答案 7 :(得分:0)

我想让这个答案更加清晰。首先创建自定义背景&#34; storage_list_header_shape.xml&#34;在你的drawable文件夹中。

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

答案 8 :(得分:0)

对于仍然挣扎的人,现有的解决方案都没有帮助,请确保在您的工具栏布局中有这个:

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

而你没有

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

由于它们会引起冲突,您的定制将无法正常工作。