1. ホーム
  2. android

[解決済み] AppCompat-v7によるツールバーとコンテクストアクションバー

2022-04-16 06:57:26

質問

ロリポップで新しく追加されたツールバーとAppCompat-v7ライブラリを使用する作業を行っています。私は以下のようにしました。 このガイド Toolbar を設定する際に、コンテキスト・アクション・バー(コピー/ペーストのためのテキストのハイライトなど)を表示させる何かを呼び出すと、ページ上で Toolbar が押し下げられることに気づきました。ページ下部の画像で、私が言っていることを確認することができます。

そこで、基本的には、このように設定します。ツールバーをxmlファイルに定義して、includeタグで使用しています。

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"/>

そして、それをビューでインスタンス化します。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/root"
    tools:context=".MainActivity">

    <include
        layout="@layout/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/> 

    <!-- Rest of view -->

    </LinearLayout>

コードでは、このように設定しています。

    // On Create method of activity:
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

Contextual ActionBarがToolbarの上に来るようにする方法をご存知の方はいらっしゃいますか?

解決方法は?

アップデートしてください。

解決策: windowActionModeOverlay プロパティを使用します。テーマで設定してください。

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

をクリックすると、アクションモードはアクションバーを押し下げるのではなく、その上に表示されます。(最新のAppCompatを使用していない場合は、プロパティに "android:" という接頭辞を追加する必要があります)。これは基本的に、画面の上部にツールバーがあることを AppCompat に知らせ、ActionMode をその上に描画するようにします。


古い答え/回避策

私も同じ問題にぶつかりました。どんなテーマを設定しても、ActionBarとして設定したToolbarを押し下げてしまいます。サポートライブラリの有無も試しましたが、問題ありませんでした。

残念ながら、私はそれを修正することができませんでしたので、私は代わりに回避策を構築しました。私の ActionModeCallback 's onCreateActionMode アクションバーを非表示にしています。

actionBarToolbar.setVisibility(View.GONE);

であり onDestroyActionMode もう一度表示します。

actionBarToolbar.setVisibility(View.VISIBLE);

非表示/表示は非常に迅速に行われるため、私のテストデバイスでは目立ちません。もちろん、欠点もあります。入力アニメーションはまだ機能しますが、コンテキスト・アクション・バーの終了アニメーションは、ツールバーがすぐにその上にポップアップするため、失われます。しかし、より良い解決策を見つけるまで、私たちはこれで立ち往生していると思います。


(私のアクティビティは、実際にはカスタム BaseActivity というメソッドを持つ getActionBarToolbar() からの引用です。 Google I/O 2014アプリのソースコード そのため、Toolbarを簡単に取得することができます。

BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);

I/Oアプリはコンテクストアクションバーが使えないのが残念です(笑)