【问题标题】:How to change ActionMode background color in Android如何在 Android 中更改 ActionMode 背景颜色
【发布时间】:2014-01-13 04:38:34
【问题描述】:

我正在创建一个支持级别 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>

这些样式解决方案可用,但都不起作用。

【问题讨论】:

  • 这是一个上下文操作栏
  • 好吧 @Raghunandan 我没有使用 CAB 我正在创建自定义操作模式

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


【解决方案1】:

如果您想更改 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 帮助了你

【讨论】:

  • 感谢您的回复,现在它在 api 11 上运行良好,但我也需要支持 api 7
  • 查看我的编辑@LoveGarg
  • 预蜂窝链接为 404
  • @TimCooke 我已经用新链接编辑了我的帖子,谢谢提及,
  • titleTextStylesubtitleTextStyle 不公开。
【解决方案2】:

如果你使用简单的Action Bar,那么试试这个,

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

但如果你使用的是Actionbar share lock Lib,那么试试这个

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 级别进行更改,那么您应该选择 this

【讨论】:

  • 试试this&this
  • 嗨 @chntan 我试过这个,但他们都为 11 以上的 api 工作,对 api 7 没有任何帮助,如果你有 api 7 的东西,请帮助我
  • 正如我在回答中提到的那样,您应该使用Actionbarshare lock Lib 用于以下 11 API。因为 ActionBar 不适用于 11 及更高版本。
  • 是的,我正在使用 actionbarsherlock,但我必须在 api 7 中更改动作模式的背景。现在在 api 11 及更高版本中更改
  • 好的,明白了,意思是你只想换7,换11应该不一样吧?是这样的吗?
【解决方案3】:

这是用于任何 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>

【讨论】:

  • “无法解析符号小部件”哈哈。什么是 min API?
【解决方案4】:

我想让这个答案更清楚。首先在您的可绘制文件夹中创建自定义背景“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>

【讨论】:

    【解决方案5】:

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

    希望对你有帮助!!!

    【讨论】:

    • 为了支持棒棒糖前后设备,还需要添加:​​@color/bg_action_bar
    • 您也可以直接在 Theme 上设置 actionModeBackground。需要加前缀和不加前缀的版本分别支持 4.x 和 5.x。
    • 这个 ​​#FFFFFF 对我不起作用。这个 ​​@color/bg_action_bar 可以!感谢国商
    • 棒棒糖前:还要添加actionModeStyle(不带android:前缀)。如果使用 appcompat 工具栏,则需要直接设置background 的样式;见:stackoverflow.com/q/28374774
    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      如果您想以编程方式执行此操作(支持 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);}
      

      【讨论】:

        【解决方案8】:

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

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

        而你没有

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

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

        【讨论】:

          【解决方案9】:

          最简单的方法

          ActionBarContextView actionBar = getWindow().getDecorView().findViewById(R.id.action_mode_bar);
              actionBar.setBackgroundColor(WhateverColorYouWant);
          

          【讨论】:

            猜你喜欢
            • 2015-07-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-08
            • 2019-11-14
            • 2013-09-12
            相关资源
            最近更新 更多