Подтвердить что ты не робот

Меню переполнения Android, расположенное над панелью действий/панелью инструментов?

Это мой первый вопрос. Горе со мной, если я не добавлю достаточно или добавляю слишком много деталей.

Я пытаюсь, чтобы мое меню переполнения появлялось под верхней панелью в моем приложении. Когда я использовал тему Holo, все было очень хорошо, но я пытаюсь использовать свое приложение для использования материального дизайна, используя библиотеку appcompat v7.

Итак, моя тема теперь распространяется на 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, появляется не в том месте. По-видимому, я не могу отправлять изображения, но в основном меню переполнения закрывает панель инструментов, а не появляется чуть ниже панели инструментов. Это началось, когда я впервые использовал "Theme.AppCompat" в обычном ActionBar и даже теперь с панелью инструментов.

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);
            }

Не похоже, чтобы кто-нибудь испытал это, надеюсь, кто-то может помочь мне понять это! Спасибо!

Вот пример одного из моих меню:

<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>
4b9b3361

Ответ 1

В Спецификация материалов (см. раздел "Меню" ):

Меню - это временный лист бумаги, который всегда перекрывает панель приложения, а не ведет себя как расширение панели приложений.

Menu overlap app bar

Итак, вы видите правильный дизайн материала для меню.

Ответ 3

Если вы измените тему Activity в манифесте, чем меню переполнения появится под панелью действий

android:theme="@android:style/Theme.Holo.Light"

Ответ 4

Несколько простых шагов Перейдите в файл манифеста 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>

Теперь вставьте эти два элемента там

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

и все готово...

P.S: К сожалению, я не могу поделиться снимком экрана здесь, кажется, что SO дает некоторую ошибку при добавлении изображений. Но вы можете видеть по этой ссылке Файл изображения