如何自定义操作模式的颜色和文本?

24

默认的操作模式(3.0及以上版本)带有绿色主题和左侧的“完成”按钮。我该如何自定义它们?

谢谢

8个回答

35

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

你知道设置标题和副标题周围小背景的属性或样式名称吗? - Catalin Morosan
我在我的应用程序中使用自定义主题,并添加了以下内容作为项目:<item name="android:actionModeSplitBackground">@drawable/cab</item>,这是我为CAB定义的分割模式下的背景,但底部仍然保持默认外观。您知道可能出现什么问题或者我做错了什么吗? - Sandra
3
请告诉我如何在应用程序中使用这个主题?我的style.xml文件:http://pastie.org/9261136 - berserk
1
“backgroundSplit” 是用来做什么的? - android developer

26

我的应用程序解决方案

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

你能告诉我如何更改勾选图像和分隔符吗? - berserk
1
为了支持Lollipop版本之前的设备,您还需要添加以下内容: <item name="actionModeBackground">@color/bg_action_bar</item> - Eduard

15

参与了我的项目

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

自定义ActionMode样式

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

11

使用此代码,您可以更改操作模式的背景颜色并更改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>

2

以下是我的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);
          }
       }

2

由于属性actionModeStyle是在API 14级引入的,因此您无法以这种方式自定义它。 对于11到13个API级别,您没有办法。

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


1

针对早期和后期Lollipop设备的更新答案。您必须删除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" 来设置样式,这样您就可以继承不需要覆盖的属性。

0
这是一个AppCompat(即使用startSupportActionMode)的解决方案,用于临时自定义CAB完成按钮的图像。临时性地更改它是理想的,以便在文本选择启动时看起来合适时将其改回使用其典型图像。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接