web-dev-qa-db-ja.com

ツールバー上にActionModeを表示

従来のAndroid.view.ActionModeに加えて、Android.support.v7.widget.Toolbarを新しいAndroid.app.ActionBarで使用しようとしています。私はそれを表示することができます:

toolbar.startActionMode(callback);

問題は、ActionModeActionBarではなくToolbarの上に表示されることです。それを変更する方法はありますか?

私は自分のテーマに以下を設定しようとしましたが、何も変わらないようです:

<item name="windowActionModeOverlay">true</item>
83
Gaëtan

Toolbarを使用しているため、AppCompatActivityを使用しており、setSupportActionBar(toolbar);

まず、正しい名前空間をインポートしていることを確認してください。

import androidx.appcompat.view.ActionMode;
// Or
import Android.support.v7.view.ActionMode;

とない

import Android.view.ActionMode;

次に使用する

_actionMode = startSupportActionMode(this);

とない

_actionMode = startActionMode(this);
75
Kuffs

アクティビティではなく、ツールバーで開始してください。あなたの活動:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)

使用する必要があります

<item name="windowActionModeOverlay">true</item>

アンドレが述べたようにあなたのテーマで。

63
Frank

あなたのテーマでこれを試してください:

<item name="windowActionModeOverlay">true</item>
37
André Restivo

人々が明らかにしていないことの1つは、

<item name="windowActionModeOverlay">true</item>

appTheme.NoActionBarではなく、AppThemeというベーステーマに配置されます

<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" />
8
Lefty

androidManifest.xmlを見つけ、次にアプリケーションまたはアクティビティテーマで以下のコードを追加します

<item name="windowActionModeOverlay">true</item>

以下のようなので:

<style name="WorkTimeListTheme" parent="AppTheme.NoActionBar">
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeBackground">@color/theme_primary</item>
    </style>
4
zhangjin

これが私が作った解決策です。

onCreateActionModeActionMode.Callbackのメソッドで、これを追加します:

StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode;
Field mContextView;
try {
     mContextView = StandaloneActionMode.class.getDeclaredField("mContextView");
     mContextView.setAccessible(true);
     View contextView = (View) mContextView.get(standaloneActionMode);
     MarginLayoutParams params = (MarginLayoutParams) contextView.getLayoutParams();
     params.topMargin = mToolbar.getTop();
  } catch (NoSuchFieldException e) {
            e.printStackTrace();
  } catch (IllegalAccessException e) {
            e.printStackTrace();
  } catch (IllegalArgumentException e) {
            e.printStackTrace();
  }

わたしにはできる。

1
Avery

上記のすべての方法を試しましたが、まだ機能しません。そして、私は以下の方法を試しました:

    private class ActionModeCallback implements ActionMode.Callback {
    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
        actionMode.getMenuInflater().inflate(R.menu.note_find_action, menu);
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
        ((AppCompatActivity) getActivity()).getSupportActionBar().hide();
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
        return false;
    }

    @Override
    public void onDestroyActionMode(ActionMode actionMode) {
        ((AppCompatActivity) getActivity()).getSupportActionBar().show();
    }
}

ここでは、サポートライブラリのアクションモードとstartSupportActionModeメソッドを使用しました。同時に、特定のアクティビティのテーマを変更しようとしました。確かに、それは機能しません。したがって、本当に良い選択肢がない場合は、これを試してみてください。

つい最近、カラフルなフレームを使用してアプリの複数のテーマを有効にしたことがわかりました。これにより、コードのテーマが変更されます。このフレームワークでスタイルを変更しようとすると、機能します。

それがうまくいくことを願っています。

1
Shouheng Wang