Android Toolbar使用ActionMode

本文详细介绍了在使用Toolbar替代ActionBar时,如何适配ActionMode,并提供了设置style和Java实现ActionMode的完整步骤,包括解决颜色和高度不一致问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Toolbar使用ActionMode


基本情况

ActionMode 其实是一种菜单方式,从Android3.0之后出现,可以通过AppCompat兼容老版本。

Android5.0之后的MD设计,使用了Toolbar代替了ActionBar,如何在使用Toolbar的时候,能够适配ActionMode

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重复出现

当然,也有可能出现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便可。


谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值