LollipopとAppCompat-v7ライブラリで導入された新しく追加されたツールバーの使用に取り組んでいます。 このガイド ツールバーの設定に従って、コンテキストアクションバーを表示するもの(コピー/貼り付け用のテキストの強調表示など)を呼び出すと、ツールバーが下に押されることに気付きましたページ。私が話していることは、ページ下部の画像で見ることができます。
したがって、本質的には、このように設定します。 includeタグで使用する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がツールバーの上に表示されるようにする方法を知っている人はいますか?
解決策: windowActionModeOverlay プロパティを使用します。これをテーマに設定します。
<item name="windowActionModeOverlay">true</item>
そして、アクションモードは、押し下げるのではなく、アクションバーの上に表示されます。 (最新のAppCompatを使用していない場合は、プロパティに「Android:」プレフィックスを追加する必要があります)。基本的にAppCompatは、画面の上部にツールバーがあり、その上部にActionModeを描画する必要があることを認識します。
私は同じ問題に遭遇しました。設定したテーマに関係なく、常にActionBarとして設定したツールバーを押し下げます。サポートライブラリを使用して、または使用せずに試しましたが、問題ではありませんでした。
残念ながら、修正することができなかったため、代わりに回避策を作成しました。 ActionModeCallback
のonCreateActionMode
で、アクションバーを非表示にします。
actionBarToolbar.setVisibility(View.GONE);
そしてonDestroyActionMode
Iにもう一度表示します:
actionBarToolbar.setVisibility(View.VISIBLE);
非表示/表示は非常に高速であるため、テストデバイスでは目立ちません。もちろん欠点もあります。アニメーションの入力は引き続き機能しますが、ツールバーがすぐにポップアップ表示されるため、コンテキストアクションバーの終了アニメーションは失われます。しかし、より良い解決策に出会うまで、これに固執していると思います。
(私のアクティビティは、実際に、 Google I/O 2014アプリのソースコード から取得したgetActionBarToolbar()
というメソッドを持つカスタムBaseActivity
クラスを拡張しているので、ツールバーを簡単に取得:
BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);
I/Oアプリがコンテキストアクションバーを使用しないのは残念です。)
アクティビティではなく、ツールバーで開始してください。あなたの活動:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
使用する必要があります
<item name="windowActionModeOverlay">true</item>
私の場合、<item name="windowActionModeOverlay">true</item>
didは機能しませんが、この機能:<item name="Android:windowActionModeOverlay">true</item>
、Android
がキーです。
Jacobのソリューションは私にとってはうまくいきましたが、コンテキストアクションバーは透明であり、ツールバーはそこから見えます。これは次のように解決できます。
<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」は、ツールバーに適用されるものでなければなりません。
コンテキストアクションバーのスタイリングに関する詳細:
別の小さな追加:UI全体をフラグメント(setContentView(R.layout.empty_screen)
)でロードする場合は、ft.replace(Android.R.id.content, fragment)
を介してアクティビティで少なくとも空の画面を設定するようにしてください。
ツールバーを前面に表示する非常に便利なメソッドtoolbar.bringToFront()