【问题标题】:How can I customize the Action Mode's color and text?如何自定义动作模式的颜色和文字?
【发布时间】:2011-07-02 09:16:44
【问题描述】:

默认操作模式(3.0 及更高版本)带有绿色主题和左侧的“完成”按钮。如何自定义这些?

谢谢

【问题讨论】:

    标签: android android-actionbar android-3.0-honeycomb android-actionmode


    【解决方案1】:

    参与我的项目

     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="actionModeStyle">@style/CustomActionModeStyle</item>
     </style>
    

    自定义动作模式样式

    <style name="CustomActionModeStyle" parent="Base.Widget.AppCompat.ActionMode">
            <item name="background">@color/color_primary</item>
            <item name="titleTextStyle">@style/CustomeActionModeTextStyle</item>
    </style>
    

    自定义标题动作模式

    <style name="CustomeActionModeTextStyle" parent="TextAppearance.AppCompat.Widget.ActionMode.Title">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">@color/color_primaryText</item>
    </style>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你知道设置标题和副标题周围小背景的属性或样式的名称吗?
      • 我在我的应用程序中使用了一个自定义主题,并作为一个项目添加了以下内容:​​@drawable/cab,这是背景我在拆分模式下为 CAB 定义的,但底部仍然保持默认外观。你知道可能是什么问题还是我做错了什么?
      • 你能告诉我如何在应用主题中使用它吗?我的 style.xml:pastie.org/9261136
      • “backgroundSplit”是干什么用的?
      【解决方案3】:

      我的应用程序的解决方案

      <style name="AppTheme" parent="@android:style/Theme.Holo.Light">
          <item name="android:actionModeBackground">@color/bg_action_bar</item>
      </style>
      

      【讨论】:

      • 您能告诉我如何更改刻度图像和分隔符吗?
      • 为了支持棒棒糖前后设备,还需要添加:​​@color/bg_action_bar
      【解决方案4】:

      使用此代码,您可以更改动作模式的背景颜色,也可以更改 DONE 图像。注意:您也可以在图像中添加文字!在 res/styles.xml 中:

      <style name="AppTheme" parent="android:Theme.Holo">
      <item name="android:actionModeBackground">@android:color/white</item>
      <item name="android:actionModeCloseDrawable">@drawable/plus</item>
      

      【讨论】:

      • 谢谢,您的回答让我无法搜索 close drawable 属性。
      【解决方案5】:

      您无法真正以这种方式自定义它,因为属性 actionModeStyle 是在 API 级别 14 中引入的。对于 API 级别 11 到 13,您不走运。

      对于 API 级别 14,您可以通过在主题中设置 android:actionModeStyle 来更改样式。

      【讨论】:

        【解决方案6】:

        这是我使用 Java 代码的方法:

        private void customizeActionModeCloseButton(String title, int iconID) {
                  int buttonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android");    
                  View v = findViewById(buttonId);
                  if (v == null) {
                     buttonId = R.id.abs__action_mode_close_button;
                     v = findViewById(buttonId);
                  }
                  if (v == null)
                     return;
                  LinearLayout ll = (LinearLayout) v;
                  if (ll.getChildCount() > 1 && ll.getChildAt(1) != null) {
                     //custom icon
                     ImageView img = (ImageView) ll.getChildAt(0);
                     img.setImageResource(iconID);
                     //custom text
                     TextView tv = (TextView) ll.getChildAt(1);
                     tv.setText(title);
                     tv.setTextColor(Color.WHITE);
                  }
               }
        

        【讨论】:

          【解决方案7】:

          更新了棒棒糖前后设备的答案。您必须删除 android: 前缀才能使其在 Lollipop+ 设备上运行,如下所示:

          styles.xml:

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

          v21/styles.xml:

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

          我还建议您设置 parent="@style/Widget.AppCompat.ActionMode" 样式,这样您就可以继承您不关心覆盖的属性。

          【讨论】:

            【解决方案8】:

            这是一个 AppCompat(即使用 startSupportActionMode)解决方案,用于临时自定义(自定义)CAB 完成按钮的图像。暂时因为希望将其改回使用它的典型图像,以便在文本选择开始时看起来合适。

            https://gist.github.com/coreform/36ed98f98668f2e90c6a

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-09-22
              • 2017-08-24
              • 2022-07-25
              • 1970-01-01
              • 2020-07-29
              • 1970-01-01
              • 2019-02-21
              • 1970-01-01
              相关资源
              最近更新 更多