【问题标题】:Actionmode Bar doesn't cover whole titlebar动作模式栏不覆盖整个标题栏
【发布时间】:2020-08-31 17:48:59
【问题描述】:

在我的应用中,我需要使用 ActionMode。

我遵循了几个指南和教程(例如https://medium.com/asos-techblog/style-actionmode-on-android-5e613fa77c32https://developer.android.com/guide/topics/ui/menus)来实现我的上下文操作菜单,但正如您在这张图片中看到的那样:

https://i.stack.imgur.com/ag2Mp.jpg

标题栏的一部分在底部仍然可见。我的问题是我是否可以做些什么来改变这种行为。

我还尝试更改 ActionModeBar 的样式,但是当我更改样式时,它变得不可见(仅显示图标)并且标题栏完全可见。

除了包含按钮的菜单外,我没有对 ActionMode 进行任何更改:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/stopCab"
          android:title="Stop contextual action bar"
          app:showAsAction="ifRoom"
          android:icon="@drawable/ic_baseline_cancel_24"/>
    
    <item android:id="@+id/deleteCab"
          android:title="Delete selected items"
          app:showAsAction="ifRoom"
          android:icon="@drawable/ic_delete_white_24dp"/>
</menu>

初始化动作模式:

    private ActionMode.Callback actionModeCallback = new ActionMode.Callback() {

        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            MenuInflater menuInflater = getMenuInflater();
            menuInflater.inflate(R.menu.contextual_action_bar_menu, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            switch (menuItem.getItemId()) {
                case R.id.deleteCab:
                    //TODO: do something
                    return true;
                case R.id.stopCab:
                    //TODO: do something
                    return true;
                default:
                    return false;
            }
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode) {
            FieldChooserActivity.this.actionMode = null;
        }
    };

并启动 ActionMode:

FieldChooserActivity.this.actionMode = startActionMode(FieldChooserActivity.this.actionModeCallback);

在我的风格中,AppTheme 父级是 Theme.AppCompat.Light.DarkActionBar 而且每个Activity都有

android:theme="@style/AppTheme.NoActionBar">

在 AndroidManifest 中。 也许这就是为什么我无法在 ActionMode 不可见的情况下更改样式的原因。

我希望有人可以帮助我解决这个问题并提前感谢!

【问题讨论】:

    标签: java android xml contextual-action-bar android-actionmode


    【解决方案1】:

    我找到了解决我的问题的解决方案(操作模式栏没有覆盖工具栏)。

    当我查看我的活动布局时,我看到工具栏中有一个名为“?attr/actionBarSize”的高度属性:

    <androidx.appcompat.widget.Toolbar 
        android:id="@+id/fieldChooserToolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay">
    

    然后我将高度添加到我的 ActionMode 的自定义样式中:

    <style name="ActionModeTheme" parent="AppTheme">
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeCloseDrawable">@drawable/ic_delete_white_24dp</item>
        <item name="actionMenuTextColor">@android:color/white</item>
        <item name="height">?attr/actionBarSize</item>
        <item name="background">@color/colorSecondary</item>
        <item name="android:src">@drawable/ic_baseline_close_24</item>
    </style>
    

    最后一部分是我在我的 AppTheme 样式中添加了以下行:

    <item name="actionModeStyle">@style/ActionModeTheme</item>
    

    然后它起作用了!

    我的 ActionMode 栏不可见的第二个问题很可能是由于将 actionModeStyling 添加到 AppTheme.NoActionBar 引起的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      相关资源
      最近更新 更多