184

Lollipop で導入された新しく追加されたツールバーと AppCompat-v7 ライブラリの使用に取り組んでいます。ツールバーのセットアップに関するこのガイドに従いました。コンテキスト アクション バーを表示する何かを呼び出すと (コピー/貼り付けのためにテキストを強調表示するなど)、ツールバーがページ上で押し下げられることに気付きました。ページの下部にある画像で、私が話していることを確認できます。

というわけで、基本的にはこんな感じに設定。インクルードタグで使用するxmlファイルで定義されたツールバーがあります。

<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 がツールバーの上に来るようにする方法を知っている人はいますか?

ツールバーとコンテキスト アクションバー

4

7 に答える 7

324

アップデート:

解決策: windowActionModeOverlayプロパティを使用します。これをテーマに設定します。

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

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


古い回答/回避策:

私は同じ問題に遭遇しました。設定したテーマに関係なく、常に ActionBar として設定したツールバーを押し下げます。サポート ライブラリの有無にかかわらず試してみましたが、問題ありませんでした。

残念ながら、私はそれを修正できなかったので、代わりに回避策を作成しました。私ActionModeCallbackの ではonCreateActionMode、アクション バーを非表示にします。

actionBarToolbar.setVisibility(View.GONE);

そして、onDestroyActionMode私はそれをもう一度示します:

actionBarToolbar.setVisibility(View.VISIBLE);

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


(私のアクティビティは、Google I/O 2014 アプリのソース コードから取得した というメソッドを持つカスタムBaseActivityクラスを実際に拡張しているため、ツールバーを簡単に取得できます。getActionBarToolbar()

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

残念なことに、I/O アプリはコンテキスト アクション バーを使用しません。)

于 2014-10-19T13:11:06.177 に答える
16

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

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

そして、あなたは使用する必要があります

<item name="windowActionModeOverlay">true</item>
于 2014-12-08T09:15:59.750 に答える
14

ちょっとした追加:

<item name="windowActionModeOverlay">true</item>
機能するには、アクティビティで呼び出すsuper.onCreate(savedInstanceState) に呼び出すことが重要です。setContentView(R.layout.your_activity)この場合は本当に違います!

于 2015-02-03T16:23:59.860 に答える
11

私の場合は <item name="windowActionModeOverlay">true</item>うまくいきませんでしたが、これはうまくいきました:<item name="android:windowActionModeOverlay">true</item>android鍵です。

于 2015-01-25T16:20:08.923 に答える
8

ジェイコブのソリューションは私にとってはうまくいきましたが、コンテキスト ActionBar は透明で、それを通してツールバーが見えました。これは次のように解決できます。

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    ....
    ....
    <item name="actionModeStyle">@style/CustomActionMode</item>
</style>

<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="background">@color/primary_material_light</item>
</style>

テーマ「AppTheme.Base」は、ツールバーに適用されたものでなければなりません。

コンテキストに応じた ActionBar スタイルに関する詳細:

マテリアル デザインで appCompat を使用してコンテキスト アクション バーをカスタマイズする方法

于 2015-07-29T06:02:29.477 に答える
0

ツールバーを前面に表示する非常に便利な方法toolbar.bringToFront()

于 2014-12-16T09:25:20.647 に答える
0

setContentView(R.layout.empty_screen)もう 1 つの小さな追加: UI 全体をフラグメントでロードする場合は、アクティビティに少なくとも空の画面を設定してください ( ft.replace(android.R.id.content, fragment))。

于 2015-03-23T18:24:48.640 に答える