Android溢出菜单位于操作栏/工具栏上方?

时间:2014-10-29 19:15:18

标签: android android-appcompat material-design

我试图让我的溢出菜单显示在我的应用中的顶部栏下方。当我使用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中膨胀的菜单出现在错误的位置。显然我无法发布图像,但基本上溢出菜单覆盖工具栏而不是出现在工具栏下方。当我使用&#34; Theme.AppCompat&#34;时,这种情况就开始发生了。首先在正常的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>

4 个答案:

答案 0 :(得分:20)

根据Material Design specifications(参见菜单部分):

  

菜单是一张临时的纸张,总是与应用栏重叠,而不是表现为应用栏的扩展名。

Menu overlap app bar

所以你看到的是菜单的正确材料设计。

答案 1 :(得分:1)

How I can place overflow menu below toolbar instead of overflow menu to overlaps the app bar查看@Girish Kumar的答案。将溢出菜单移到应用栏的底部绝对是可能的。

答案 2 :(得分:0)

如果您更改了清单中活动的主题,则溢出菜单位于操作栏下方

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

答案 3 :(得分:0)

一些简单的步骤 转到android清单文件并搜索下拉菜单所在的活动,对于我的欢迎活动 现在按控制键并单击主题名称

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

现在将这两个项目粘贴到那里

tableView.transform = CGAffineTransform (scaleX: 1,y: -1)

你完成了......

P.S:不幸的是我不能在这里分享屏幕截图,似乎SO在添加图片方面有些错误。但你可以在这个链接上看到 dropna