默认操作模式(3.0 及更高版本)带有绿色主题和左侧的“完成”按钮。我该如何定制这些?
谢谢
默认操作模式(3.0 及更高版本)带有绿色主题和左侧的“完成”按钮。我该如何定制这些?
谢谢
这是用于任何 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>
我的应用程序的解决方案
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionModeBackground">@color/bg_action_bar</item>
</style>
在我的项目上工作
<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>
使用此代码,您可以更改动作模式的背景颜色并更改完成图像。注意:您也可以在图像中添加文字!在 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>
您不能真正以这种方式自定义它,因为属性 actionModeStyle 是在 API 级别 14 中引入的。对于 API 级别 11 到 13,您不走运。
对于 API 级别 14,您可以通过在主题中设置 android:actionModeStyle 来更改样式。
这是我使用 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);
}
}
更新了棒棒糖前后设备的答案。您必须删除 android: 前缀才能使其在 Lollipop+ 设备上运行,如下所示:
样式.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"
set 样式,这样您就可以继承您不关心覆盖的属性。
这是一个 AppCompat(即使用 startSupportActionMode)解决方案,用于临时自定义(自定义)CAB 完成按钮的图像。暂时因为希望将其改回以使用它的典型图像,以便在文本选择开始时看起来合适。