jwi*_*ir3 5 android styles android-actionbar android-actionmode
我TextView的操作栏位于内部,如下所示:

我已将逻辑配置为在我长按关联的项目时使其Toolbar与重叠。最终结果如下所示:ActionModeListView

除了TextView标题中令人讨厌的背景,这基本上是正确的ActionMode。
从更改文件Widget.ActionMode样式styles.xml到实际将设置actionModeStyle为特定样式,我已经做了很多尝试。TextView不过,似乎没有任何影响。
我已通读过如何在Android中更改ActionMode背景颜色,但是我所做的任何事情似乎都不会对此背景产生影响。
注意:如果有某种方法可以在渲染时查看Android设备上的样式层次结构,那就太好了。层次结构查看器为我提供了大约1/3的方式,但是它没有任何样式信息。有人知道我可以用来调试此问题的工具吗?
styles.xml(仅相关内容):
<style name="Material" parent="Theme.AppCompat.Light">
<item name="textHeaderMaxLines">@integer/text_header_max_lines</item>
<item name="trackAbstractMaxLines">@integer/track_abstract_max_lines</item>
<item name="activatableItemBackground">@drawable/activatable_item_background</item>
<!-- ActionMode Styles -->
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/app_green_dark</item>
</style>
<style name="Material.AppBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:textColorPrimaryInverse">@android:color/white</item>
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:background">@color/app_green</item>
<item name="android:color">@android:color/white</item>
<item name="android:textColor">@android:color/white</item>
</style>
<style name="Material.AppBar.ActionMode" parent="Widget.AppCompat.Light.ActionMode.Inverse">
<item name="android:background">@color/app_green_dark</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我认为你可以尝试使用 hack 方式来更改背景:
\n\n通过Java:
\n\nhierarchyviewer.bat分析布局,关注视图ActionMode,可以看到如下:(Title ID: action_bar_title, SubTitle ID: action_bar_subtitle)
TextView2.根据我们上面找到的ID找到指定的,然后做你想做的事!
/**\n * To hack the title and subTitle in ActionMode\n */\nprivate void hack() {\n int titleID = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");\n View titleView = getWindow().getDecorView().findViewById(titleID);\n if ((titleView != null) && (titleView instanceof TextView)) {\n ((TextView) titleView).setBackgroundColor(Color.RED);\n }\n int subTitleID = Resources.getSystem().getIdentifier("action_bar_subtitle", "id", "android");\n View subTitleView = getWindow().getDecorView().findViewById(subTitleID);\n if ((subTitleView != null) && (subTitleView instanceof TextView)) {\n ((TextView) subTitleView).setBackgroundColor(Color.GREEN);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n3.创建时可以调用该方法ActionMode,例如:在onCreateActionMode(). 最终结果\xef\xbc\x9a

通过样式:
\n\n或者您可以尝试设置 aandroid:actionModeStyle来控制标题和副标题背景,但android:background似乎不起作用:
<!-- Base application theme. -->\n<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">\n <!-- Customize your theme here. -->\n <item name="android:actionModeBackground">@android:color/white</item>\n <item name="android:actionModeStyle">@style/TestActionModeStyle</item>\n</style>\n\n<style name="TestActionModeStyle">\n <item name="android:titleTextStyle">@style/TestTitleStyle</item>\n <item name="android:subtitleTextStyle">@style/TestSubTitleStyle</item>\n</style>\n\n<style name="TestTitleStyle">\n <item name="android:textColor">@android:color/black</item>\n <item name="android:background">@android:color/holo_red_dark</item>\n</style>\n\n<style name="TestSubTitleStyle">\n <item name="android:textColor">@android:color/black</item>\n <item name="android:background">@android:color/holo_green_dark</item>\n</style>\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:
\n\n顺便一提:
\n\n我认为最灵活的方式是自定义你自己的ActionMode视图,这很容易实现,只需设置一个自定义视图即可:
@Override\npublic boolean onCreateActionMode(ActionMode pMode, Menu pMenu) {\n RelativeLayout layout = (RelativeLayout) LayoutInflater.from(mContext).inflate(R.layout.custom_layout, null);\n findView(...);\n initView(...);\n pMode.setCustomView(layout);\n return true;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |