上下文操作栏样式

23

我正在寻找有关上下文操作栏(CAB)的样式信息。实际上,我只需要更改文本的颜色。

Result of contextual actionbar

正如您从上面所看到的,这是使用标准的Theme.Holo.Light.DarkActionBar主题,因此我只需要将文本颜色设置为白色! 有人能指点我正确的方向吗?

1
看起来这是一个 bug:http://code.google.com/p/android/issues/detail?id=26008 - Eurig Jones
4个回答

51

要更改上下文操作栏中文本的颜色/等等:

public boolean onCreateActionMode(ActionMode mode, Menu menu) {
  //mode.setTitle("Contextual Action Bar"); (replace this call)
  TextView tv= (TextView)getLayoutInflater().inflate(R.layout.contextual_title, null);
  tv.setText("Contextual Action Bar");
  mode.setCustomView(tv);

在 layout/contextual_title.xml 文件中,包含有一个 TextView 控件,你可以设置所需的颜色、大小和样式等。

实际上,上下文操作栏中几乎所有内容都可以进行样式设计。唯一的问题是查找“contextual”一词没有明确的结果。相关的样式特性都被称为“actionMode...”。以下是一些我使用过的(定义在我的主题中)。

<item name="android:actionModeCloseDrawable">@drawable/check</item>
<item name="android:actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
<item name="android:actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
<item name="android:actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
<item name="android:actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
<item name="android:actionModeBackground">@drawable/contextual</item>
<item name="android:actionModeCloseButtonStyle">@style/MyCloseButton</item>

<!-- these change the press backgrounds for the vanilla actionBar and for search -->
<item name="android:windowContentOverlay">@null</item>
<item name="android:selectableItemBackground">@drawable/bar_selector</item>
<item name="android:actionBarItemBackground">@drawable/bar_selector</item>      

<!-- these were defined in platform/.../data/res/values/... but Eclipse didn't recognize them -->
<!--? item name="android:actionModeShareDrawable">@drawable/icon</item -->
<!--? item name="android:actionModeFindDrawable">@drawable/icon</item -->
<!--? item name="android:actionModeWebSearchDrawable">@drawable/icon</item -->
<!-- item name="android:actionModeBackground">@drawable/red</item -->

<!-- and finally -->
<style name="MyCloseButton" parent="android:style/Widget.ActionButton.CloseMode">
    <item name="android:background">@drawable/bar_selector</item>
</style>

您可以轻松设置自己的文本编辑剪切/粘贴/复制/全选图标、工具栏背景和在按下图标时更改颜色的图标背景(bar_selector以上)。这些图标是ImageView,而不是按钮,并且编辑id(以及可按背景)附加到ImageView的父项(每个视图一个父项),父项是"内部"类型。
样式中什么放在哪里并不清楚——我在平台Themes.xml中找到了selectableItemBackground,然后复制并修改了指向它的可绘制对象。

1
这里没有涵盖的一件事是如何更改关闭按钮(而不是标题)的文本颜色。在我的许多设备上,即使我将关闭模式按钮的样式设置为常规霍洛,它仍然显示为暗色。我甚至尝试在关闭模式样式中设置文本颜色。 - Jeffrey Blattman
能否请您详细解释一下如何更改CAB的背景?因为当我在我的操作栏样式中添加item="android:actionModeBackground"时,对我来说什么也没有发生:( - Sandra
6
这个回答获得了很多赞,让我有点惊讶,因为它并没有回答问题。问题在于这是一个错误。 - Eurig Jones
1
答案有用,因此被投票支持。勾选标记表示接受该问题。 - Luis
你如何更改CAB溢出菜单的背景? - Sandra

4

0

现在它可以工作了,但你必须将其输入到values/styles.xml(而不是values-v#/styles.xml),并将其输入到通用的(非API特定的)标签中。

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionModeCloseDrawable">@drawable/ic_launcher</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

0
如果您手动启动上下文操作模式,可以在启动之前调用setTheme()方法设置新的主题(例如Theme.AppCompat.Light.DarkActionBar,以避免黑色背景上的黑色文本问题)。这不会影响当前活动的主题,如果您已经设置了活动的内容视图。
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.my_activity_layout);

    // these lines can occur anywhere so long as you've already 
    // called "setContentView()" on the activity. The theme
    // you set here will apply to the action mode, but not to 
    // the activity.
    setTheme(R.style.Theme_AppCompat_Light_DarkActionBar);
    startSupportActionMode(myActionModeCallback);

}

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