如何在材质devise中使用appCompat自定义上下文动作栏
MainActivity.java
我在这个类中实现了MultiChoiceModeListener
,下面是代码:
在listView
:
listView.setMultiChoiceModeListener(MainActivity.this); listView.setChoiceMode(listView.CHOICE_MODE_MULTIPLE_MODAL); @Override public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) { switch (arg1.getItemId()) { case R.id.save: // Close CAB arg0.finish(); return true; case R.id.saveto: // Close CAB arg0.finish(); return true; default: return false; } } @Override public boolean onCreateActionMode(ActionMode arg0, Menu arg1) { arg0.getMenuInflater().inflate(R.menu.save_menu, arg1); return true; } @Override public void onDestroyActionMode(ActionMode arg0) { listadaptor.removeSelection(); } @Override public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) { return false; } @Override public void onItemCheckedStateChanged(ActionMode arg0, int arg1, long arg2, boolean arg3) { final int checkedCount = listView.getCheckedItemCount(); arg0.setTitle(checkedCount + " "+getResources().getString(R.string.selected)); listadaptor.toggleSelection(arg1); }
style.xml
<style name="AppTheme.Base" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/White</item> <item name="android:windowNoTitle">true</item> <item name="windowActionModeOverlay">true</item> <item name="windowActionBar">false</item> <item name="actionModeStyle">@style/LStyled.ActionMode</item> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppTheme.Base"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode"> <item name="background">@color/colorPrimary</item> </style> <style name="ActionBarThemeOverlay" parent="Theme.AppCompat.Light"> <item name="android:textColorPrimary">#fff</item> <item name="colorControlNormal">#fff</item> <item name="colorControlHighlight">#3fff</item> </style> <style name="HeaderBar"> <item name="android:background">#009688</item> <item name="android:textStyle">bold</item> </style> <style name="ActionBarPopupThemeOverlay" parent="ThemeOverlay.AppCompat.Light"> <item name="android:textColor">#000</item> </style>
下面是我的截图:
你可以看到两个截图,在第二个屏幕截图中,动作模式背景是白色的,文字颜色也是白色的..我想把它改成第一个屏幕截图。
您可以通过属性actionModeStyle
更改ActionMode
背景:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light"> .... .... <item name="actionModeStyle">@style/LStyled.ActionMode</item> </style> <style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode"> <item name="background">@color/color_action_mode_bg</item> </style>
您当然需要定义一个名为color_action_mode_bg
的颜色:
<color name="color_action_mode_bg">#009688</color>
还有其他的东西可以改变。 例:
<item name="titleTextStyle">...</item> <item name="subtitleTextStyle">...</item> <item name="height">...</item>
要更改SAVE
和SAVETO
文本颜色,请将以下内容添加到AppTheme.Base
:
<item name="actionMenuTextColor">@color/color_action_mode_text</item>
在你的AppTheme.Base风格中使用actionModeBackground 。
<item name="actionModeBackground">@color/colorPrimary </item> (or) <item name="android:actionModeBackground">@color/colorPrimary </item>