web-dev-qa-db-ja.com

Androidアクションバー/ツールバーの上にあるオーバーフローメニュー?

アプリのトップバーの下にオーバーフローメニューを表示しようとしています。 Holoテーマを使用していたときはこれで問題ありませんでしたが、appcompatv7ライブラリを使用してアプリでマテリアルデザインを使用できるようにしようとしています。

したがって、私のテーマはAppCompatから拡張されています。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/ucla_blue</item>
        <item name="colorAccent">@color/caldroid_white</item>
        <item name="Android:actionMenuTextColor">@color/caldroid_black</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>
</resources>

そして、これはマテリアルデザインテーマをこのレイアウトのツールバーに適切に適用します。

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/linearlayout_root_main"
    Android:layout_height="match_parent"
    Android:layout_width="match_parent">
    <!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
    <Android.support.v4.widget.DrawerLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:tools="http://schemas.Android.com/tools"
        Android:id="@+id/drawer_layout"
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"
        tools:context="com.ucla.ieee.app.MainActivity">

        <LinearLayout
            Android:layout_height="match_parent"
            Android:layout_width="match_parent"
            Android:orientation="vertical">

            <Android.support.v7.widget.Toolbar
                xmlns:Android="http://schemas.Android.com/apk/res/Android"
                xmlns:app="http://schemas.Android.com/apk/res-auto"
                Android:background="?attr/colorPrimary"
                Android:id="@+id/toolbar"
                Android:layout_height="wrap_content"
                Android:layout_width="fill_parent"
                Android:minHeight="?attr/actionBarSize"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
            <!-- As the main content view, the view below consumes the entire
             space available using match_parent in both dimensions. -->
            <FrameLayout
                Android:id="@+id/container"
                Android:layout_height="match_parent"
                Android:layout_width="match_parent"/>
        </LinearLayout>


        <!-- The navigation drawer -->
        <fragment
            Android:id="@+id/navigation_drawer"
            Android:layout_gravity="start"
            Android:layout_height="match_parent"
            Android:layout_marginTop="?attr/actionBarSize"
            Android:layout_width="@dimen/navigation_drawer_width"
            Android:name="navigation.NavigationDrawerFragment"
            tools:layout="@layout/fragment_navigation_drawer"/>

    </Android.support.v4.widget.DrawerLayout>
</LinearLayout>

しかし、何らかの理由で、onCreateOptionsMenuで膨らませたメニューが間違った場所に表示されます。どうやら画像を投稿できないようですが、基本的にオーバーフローメニューはツールバーのすぐ下に表示されるのではなく、ツールバーをカバーしています。これは、最初に通常のActionBarで「Theme.AppCompat」を使用し、現在でもツールバーで使用したときに発生し始めました。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            switch (selected) {
                case FRONT_PAGE:
                    toolbar.inflateMenu(R.menu.main_settings);
                    return false;
                case ANNOUNCEMENTS:
                    toolbar.inflateMenu(R.menu.refresh_settings);
                    return false;
                case MEMBERSHIP:
                    toolbar.inflateMenu(R.menu.edit_member);
                    return false;
                case CALENDAR:
                    toolbar.inflateMenu(R.menu.refresh_settings);
                    return false;
                case POINTS_REWARDS:
                    toolbar.inflateMenu(R.menu.main_settings);
                    return false;
                case HELP:
                    toolbar.inflateMenu(R.menu.main_settings);
                    return false;
                default:
                    toolbar.inflateMenu(R.menu.main_settings);
            }

これを経験している人も見つからなかったようです。

これが私のメニューの1つの例です:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    tools:context="com.ucla_ieee.app.MainActivity">
    <item Android:id="@+id/action_refresh"
          Android:title="@string/action_refresh"
          app:showAsAction="never" />
</menu>
14
Tania

マテリアルデザイン仕様 (メニューセクションを参照)による:

メニューは、アプリバーの拡張として動作するのではなく、常にアプリバーと重なる一時的な紙です。

Menu overlap app bar

つまり、表示されているのは、メニューの正しいマテリアルデザインです。

20
ianhanniballake

@Girish Kumarによる回答をチェックしてください オーバーフローメニューの代わりにツールバーの下にオーバーフローメニューを配置してアプリバーとオーバーラップさせる方法 。オーバーフローメニューをアプリバーの下部に移動することは間違いなく可能です。

2
FingerSmith

いくつかの簡単な手順Androidマニフェストファイルに移動し、ドロップダウンメニューが表示されているアクティビティを検索します。私の場合は歓迎しますアクティビティ今すぐコントロールを押してテーマ名をクリックします

<activity
        Android:name=".MainActivity"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

そこに行くと、テーマが書かれているスタイルファイルに移動します。

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

これらの2つのアイテムをそこに貼り付けます

<item name="overlapAnchor">false</item>
<item name="Android:dropDownVerticalOffset">5.0dp</item>

そして、あなたは完了です...

追伸:残念ながら、ここでスクリーンショットを共有することはできません。SO画像の追加でエラーが発生しているようです。しかし、このリンクで確認できます 画像ファイル

1
Aftab Mondal

マニフェストでアクティビティのテーマを変更すると、オーバーフローメニューがアクションバーの下に表示されます

Android:theme="@Android:style/Theme.Holo.Light"
0
Jaffar Raza