Toolbar使用ActionMode
基本情况
ActionMode 其实是一种菜单方式,从Android3.0之后出现,可以通过AppCompat兼容老版本。
Android5.0之后的MD设计,使用了Toolbar代替了ActionBar,如何在使用Toolbar的时候,能够适配ActionMode
设置Style
<style name="AppTheme" parent="AppTheme.Parent">
<!-- Customize theme here. -->
</style>
<style name="AppTheme.Parent" parent="Theme.AppCompat">
<item name="windowActionModeOverlay">true</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
以上的 <item name="windowActionModeOverlay">true</item>
其实是为了能够让ActionMode能够覆盖我们的Toolbar,否则会出现ActionMode将Toolbar顶下去的样子(重复出现):
当然,也有可能出现ActionMode和Toolbar的颜色不同,或者高度不一致的问题:
再次修改style,最终的 style.xml:
<style name="AppTheme" parent="AppTheme.Parent">
<!-- Customize theme here. -->
<item name="actionModeStyle">@style/CustomActionMode</item>
</style>
<style name="AppTheme.Parent" parent="Theme.AppCompat">
<item name="windowActionModeOverlay">true</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="background">@color/primary_color</item>
<item name="height">64dp</item>
</style>
Java
注意:
ActionMode.Callback
接口使用android.support.v7.view.ActionMode 而不是 android.view.ActionMode- Activity需要继承AppCompatActivity
- 通过startSupportActionMode启动ActionMode而不是startActionMode
private ActionMode.Callback mCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.setTitle("This is Title");
mode.setSubtitle("This is SubTitle");
getMenuInflater().inflate(R.menu.menu_item_callback, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
};
...
startSupportActionMode(mCallback);
总结
其实Toolbar适配ActionMode最重要的是:设置正确的style,对于有自己的设计需求,修改CustomActionMode便可。