23

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

上下文操作栏的结果

从上面可以看出,这是使用标准的Theme.Holo.Light.DarkActionBar主题,所以我只需要将文本颜色设置为白色!

谁能指出我正确的方向?

4

4 回答 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

事实上,上下文操作栏中的几乎所有内容都可以设置样式。唯一的问题是搜索“上下文”这个词毫无用处。相关的样式特性都称为“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 的位置,并复制并修改了指向的可绘制对象。

于 2012-06-30T19:43:26.453 回答
4

我对自己的问题发表了评论,这实际上是我使用的 android 版本中的一个错误(可能是 4.0 的早期版本)

这是描述的错误:http ://code.google.com/p/android/issues/detail?id=26008

于 2013-01-31T21:20:24.800 回答
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);

}
于 2013-12-11T17:09:24.647 回答
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>
于 2014-02-26T22:58:40.560 回答