在工具栏上显示ActionMode

Gaë*_*tan 85 android android-support-library android-actionmode android-toolbar

我试图使用android.view.ActionMode新的android.support.v7.widget.Toolbar,除了传统的android.app.ActionBar.我可以用以下方式显示它:

toolbar.startActionMode(callback);
Run Code Online (Sandbox Code Playgroud)

问题是,ActionMode显示在ActionBar,而不是在Toolbar.有办法改变吗?

我试图在我的主题中设置以下内容,但它似乎没有改变任何东西:

<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

Kuf*_*ffs 77

由于您使用的是Toolbar,我还以为你正在使用的 AppCompatActivity和已经取代了内置的ActionBar与您的自定义Toolbar使用 setSupportActionBar(toolbar);

首先确保您导入正确的命名空间.

import androidx.appcompat.view.ActionMode;
// Or
import android.support.v7.view.ActionMode;
Run Code Online (Sandbox Code Playgroud)

并不是

import android.view.ActionMode;
Run Code Online (Sandbox Code Playgroud)

然后用

_actionMode = startSupportActionMode(this);
Run Code Online (Sandbox Code Playgroud)

并不是

_actionMode = startActionMode(this);
Run Code Online (Sandbox Code Playgroud)

  • 加上'windowActionModeOverlay`设置对我有用. (32认同)
  • 我目前正在使用`AppCompatActivity`并且添加`windowActionModeOverlay`对我来说已经足够了.我尝试使用import`android.support.v7.view.ActionMode`但它不适用于`MultiChoiceModeListener`,所以我最终使用`android.view.ActionMode`代替.你知道是否有支持版本的`MultiChoiceModeListener`?谢谢 (4认同)

Fra*_*ank 66

不要在您的活动上启动它,而是在工具栏上启动它.在你的活动中:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
Run Code Online (Sandbox Code Playgroud)

你必须使用

<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

在你的主题中,安德烈说.


And*_*ivo 40

在你的主题中尝试这个:

<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试使用和不使用`android:`前缀,并将其放在我的应用程序主题中.`ActionMode`覆盖了`ActionBar`,但是我希望它超过我的`Toolbar`,它位于`ActionBar`之下. (2认同)

Lef*_*fty 10

我认为人们不清楚的一件事是

<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

放置在基本主题中,即AppTheme而不是AppTheme.NoActionBar

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionModeOverlay">true</item>
</style>

<style name="transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
</style>


<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
Run Code Online (Sandbox Code Playgroud)


小智 5

找到您的AndroidManifest.xml,然后在您的应用程序或Activity主题中添加以下代码

<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

像这样:

<style name="WorkTimeListTheme" parent="AppTheme.NoActionBar">
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeBackground">@color/theme_primary</item>
    </style>
Run Code Online (Sandbox Code Playgroud)


Leo*_*sch 5

所以,在通过这个线程几天后,我终于让它工作了。我想总结一下我所做的。

注:这是使用该解决方案Toolbar来替代默认ActionBarAppCompatActivity

  1. 我将此行添加到我的AppTheme: 它告诉 android 您希望您的操作模式覆盖工具栏
<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)
  1. 使用正确的导入:

您必须使用这些导入才能使用AppCompatActivity

import androidx.appcompat.view.ActionMode;
// or
import android.support.v7.view.ActionMode;
Run Code Online (Sandbox Code Playgroud)
  1. 在您的 Activity 上启动 ActionMode,如下所示:
actionMode = startSupportActionMode(callback);
Run Code Online (Sandbox Code Playgroud)

而不是这样:

actionMode = startActionMode(callback);
Run Code Online (Sandbox Code Playgroud)

您的 Activity 会自动在工具栏上创建 ActionMode,因为它被设置为 supportActionToolbar。该样式将显示处理为叠加。

感谢@Kuffs 和@Lefty。