【问题标题】:Contextual Action Bar (CAB) does not overlay Toolbar上下文操作栏 (CAB) 不覆盖工具栏
【发布时间】:2019-06-30 20:49:26
【问题描述】:

我真的被这个困住了。

我想在片段中使用 CAB,所以我正在使用

actionMode = ((MainActivity)getActivity()).startActionMode(actionModeCallbacks);

拨打startActionMode

我一直在更改主题,并将几行代码(一起和分开)添加和测试到 xml 样式中,例如:

<item name="android:windowActionModeOverlay">true</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowActionBar">false</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<item name="windowActionBarOverlay">true</item>

相关信息:

  • 我在内部定义了我的工具栏,并在我的主要活动中定义了&lt;include/&gt;
  • 工具栏包含在 MainActivity 框架之前,位于该框架和 DrawerLayout 之间,因此我可以在片段中使用工具栏。
  • 我已经在 Main Activity 中测试了 CAB,但它也高于 工具栏。
  • 我还尝试了一个肮脏的解决方法,在 CAB 时切换工具栏的可见性 被创建/销毁,但它也不起作用!
  • 我正在使用android.view.ActionMode 而不是 android.support.v7.view.ActionMode 因为我不能打电话 如果我使用支持库 (?),则为 startActionMode。

我的工具栏(*android.support.v7.widget.Toolbar):

        toolbar = findViewById(R.id.toolbar);

        mDrawerLayout = findViewById(R.id.drawer_layout);

        toolbar.setTitle(R.string.addWordLabel_Act);
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);

XML(工具栏)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#FAFAFA"
        android:theme="@style/AppTheme.NoActionBar"
        app:collapseIcon="@drawable/ic_arrow_back_white_24dp"
        app:contentInsetStartWithNavigation="0dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:title="@string/addWordLabel_Act"
        app:titleTextColor="@color/colorAccent"
        />

</android.support.constraint.ConstraintLayout>

ActionMode.Callback

        private ActionMode actionMode;


private  ActionMode.Callback actionModeCallbacks = new ActionMode.Callback() 
        {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.getMenuInflater().inflate(R.menu.action_mode_menu, menu);
            return true;
        }

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

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

            switch (item.getItemId()) {
                case R.id.share_actionMode:
                    shareWord();
                    mode.finish();
                    return true;
                case R.id.deleteWords_actionMode:
                    deleteWords();
                    mode.finish();
                    return true;
                default:
                    return false;
            }

        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            actionMode = null;
        }
    };

XML (CAB)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:title="Share"
        android:icon="@drawable/ic_share_white_24dp"
        android:id="@+id/share_actionMode"/>

    <item android:id="@+id/deleteWords_actionMode"
        android:title="Delete"
        android:icon="@drawable/ic_round_delete_outline_white_24px"/>

</menu>

还有样式...

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/lightAccent</item>
    <item name="colorSecondary">@color/colorSecondary</item>
    <item name="android:fontFamily">@font/sans_serif_roboto</item>
    <item name="alertDialogTheme">@style/AlertDialogStyle</item>
    <item name="android:windowActionModeOverlay">true</item>

</style>

<style name="AppTheme.NoActionBar" 
    parent="Theme.MaterialComponents.NoActionBar">

</style>

我不知道我还能做什么。


已解决

我完全忘记检查 Manifest,这就是问题所在! AppTheme 设置为"Theme.AppCompat.Light.NoActionBar" 而不是"AppTheme"。因此,我在 AppTheme 中所做的任何更改都不会在 App 上生效。

【问题讨论】:

  • 对不起,我忘记了。现在它完成了。谢谢

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


【解决方案1】:

我完全忘记检查 Manifest,这就是问题所在! AppTheme 设置为“Theme.AppCompat.Light.NoActionBar”而不是“AppTheme”。因此,我在 AppTheme 中所做的任何更改都不会在 App 上生效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多