2014-10-29 15 views
13

Questa è la mia prima domanda di overflow dello stack. Bare con me se non aggiungo abbastanza o aggiungo troppi dettagli.Menu di overflow Android posizionato sopra la barra delle azioni/barra degli strumenti?

Sto cercando di far apparire il menu di overflow sotto la barra in alto nella mia app. Quando stavo usando il tema Holo, l'ho fatto bene, ma sto cercando di far usare la mia app per la progettazione dei materiali usando la libreria v7 appcompat.

Quindi il mio tema di oggi si estende da 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> 

E questo fa correttamente applicare il tema di progettazione materiale alla mia barra degli strumenti in questo layout:

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

Ma per qualche ragione, il menu I gonfia in onCreateOptionsMenu appare nel posto sbagliato. Apparentemente non posso pubblicare immagini ma fondamentalmente il menu di overflow copre la barra degli strumenti invece di apparire appena sotto la barra degli strumenti. Questo ha avuto inizio quando uso "Theme.AppCompat" prima in una normale ActionBar e anche ora con una barra degli strumenti.

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

Non riesco a trovare nessuno in questo modo, spero che qualcuno possa aiutarmi a capirlo! Grazie!

Ecco un esempio di uno dei miei menù:

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

risposta

19

Per il Material Design specifications (vedere la sezione Menu):

Un menu è un foglio ad hoc di carta che si sovrappone sempre la barra di app , piuttosto che comportarsi come un'estensione della barra delle applicazioni.

Menu overlap app bar

Quindi ciò che state vedendo è il disegno materiale corretto per i menu.

+1

Grazie, ma ho già fatto questo nella mia attività principale. Non è che il menu non funzioni, sembra solo sbagliato: http://i.imgur.com/0ybW1A9.png – Tania

+0

Aggiornato la mia risposta dato il tuo screenshot: quello che stai vedendo è un menu di Material Design. – ianhanniballake

+0

Oh dannazione, suppongo che le app che ho implementato Material Design mi abbiano dato un'idea sbagliata. Grazie!! – Tania

0

Se si cambia il tema di attività in palese che il menu di overflow arriva al di sotto della ActionBar

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

Alcuni semplici passaggi Vai android file manifesto e la ricerca per l'attività in cui è presente il vostro menu a discesa, per il mio è benvenuto Attività Ora premere Control e cliccare sul nome del tema

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

si passa agli stili di file in cui il tema è scritto volta y ou andare lì, è

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

Ora incollare questi due elementi ci

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

e si è fatto ...

P.S: Sfortunatamente non posso condividere lo screenshot qui, sembra che SO abbia dato qualche errore nell'aggiungere immagini. Ma potete vedere su questo link Image File

Problemi correlati