36

Ich versuche, die ActionBar in meiner App ordnungsgemäß zu verwenden (und verwende ActionBarSherlock, um eine einheitliche Benutzeroberfläche zwischen Android 2.x zu erhalten) und 4.x).showAsAction = "ifRoom" zeigt das Objekt nicht an, auch wenn viel Platz vorhanden ist

Ich fühle mich wie android:showAsAction="ifRoom" ist nur eine große, fette Lüge. Immer wenn ich eine Aktion auf ifRoom setze, wird es IMMER im Überlaufmenü angezeigt, auch wenn viel Platz vorhanden ist. Hier sind zwei Screenshots vom selben Emulator. Die erste zeigt die ActionBar mit allen Optionen, die auf always eingestellt sind, und die zweite zeigt die ActionBar mit den letzten zwei Optionen, die auf ifRoom gesetzt sind. Wie Sie sehen können, gab es reichlich Raum, wenn sie alle in der always Screenshot gezeigt wurden, also warum zeigen sie nicht alle in der Sekunde, weil sie Raum haben?

enter image description here

enter image description here

Hier ist meine menu.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/add" 
     android:icon="@drawable/ic_menu_btn_add" 
     android:showAsAction="always" 
     android:title="Add"/> 
    <item 
     android:id="@+id/calculateNPV" 
     android:icon="@drawable/menu_icon_npv" 
     android:showAsAction="always" 
     android:title="NPV"/> 
    <item 
     android:id="@+id/calculateIRR" 
     android:icon="@drawable/menu_icon_irr" 
     android:showAsAction="always" 
     android:title="IRR/YR"/> 
    <item 
     android:id="@+id/send" 
     android:icon="@android:drawable/ic_menu_share" 
     android:showAsAction="always" 
     android:title="@string/share_pdf"/> 
    <item 
     android:id="@+id/graph" 
     android:icon="@drawable/ic_menu_gallery" 
     android:showAsAction="ifRoom" 
     android:title="@string/view_cashflow_diagram"/> 
    <item 
     android:id="@+id/deleteReorder" 
     android:icon="@drawable/ic_menu_clear_playlist" 
     android:showAsAction="ifRoom" 
     android:title="@string/delete_reorder_cashflows"/> 

</menu> 

Antwort

11

Es ist, weil es wird die maximale Anzahl der Elemente angegeben, die ActionBar gehen sollte, und es scheint zu sein, 4. Von Natürlich können Sie sie zwingen, durch Einstellung showAsAction: always zu erscheinen, aber in Bezug auf Google API-Guides:

Wenn Sie der Meinung sind, dass mehr als vier Ihrer Menüelemente als Aktionselemente gerechtfertigt werden können, sollten Sie sorgfältig ihre relative Wichtigkeit in Betracht ziehen und versuchen, nicht mehr als vier als Aktionselemente festzulegen (und dies unter Verwendung von der Wert "ifRoom", damit das System einige zurück in das Überlaufmenü setzen kann, wenn der Platz auf kleineren Bildschirmen begrenzt ist. Auch wenn Platz auf einem großen Bildschirm verfügbar ist, sollten Sie keine lange Aktionsströme erstellen, die die Benutzeroberfläche durcheinander bringen und wie eine Desktop-Symbolleiste erscheinen. Halten Sie daher die Anzahl der Aktionselemente auf ein Minimum.

Darüber hinaus sollten die folgenden Aktionen nie als Aktion Elemente angezeigt werden: Einstellungen, Hilfe, Feedback oder ähnliches. Behalten Sie sie immer im Überlaufmenü .

+13

Es ist nicht immer 4. nachstehende Tabelle Siehe: http://developer.android.com/ design/media/action_bar_pattern_table.png –

+4

Aber wie Sie sehen können, gibt es Raum für diese Aktionen, also -istRaum- eine große, fette Lüge. :) Es ist auch frustrierend, dass es keinen sichtbaren Indikator gibt, dass weitere Optionen über die Menü-Schaltfläche verfügbar sind. Es ist viel schlimmer, ihnen einige Optionen zu zeigen, aber nicht alle ohne einen Indikator, weil die Anzeige von SOME dem Benutzer mitteilt, dass dies der Ort ist, an dem er suchen soll. Warum sollte es einen anderen Ort geben? –

+1

@Jake Wharton: Ja richtig! Ich wusste, dass ich so etwas schon einmal gesehen habe, aber ich konnte mich nicht erinnern, wo. Jetzt denke ich, dass es in einem von Google Design in Actionvideos über ActionBar war ... Danke! –

7

Um die Antwort von Michal Z .: Der Android Design Guide Seite Schnittmuster-> ActionBar sagt der folgende im Kapitel "Aktionsschaltflächen" ergänzen:

http://developer.android.com/design/patterns/actionbar.html

Wie viele Aktionen passen in der Hauptaktionsleiste? Aktionsleiste Kapazität wird durch die folgenden Regeln gesteuert:

  • Aktionsschaltflächen in der Hauptaktionsleiste darf nicht mehr als 50% der Breite der Bar einnehmen.
  • Aktionstasten auf unteren Aktionsleisten können die gesamte Breite verwenden.
  • die Bildschirmbreite in dichteunabhängige Pixel (dp) die Anzahl der Elemente bestimmen, die in der Hauptaktionsleiste passt:
    • kleiner als 360 dp = 2 Symbole
    • 360-499 dp = 3 Symbole
    • 500-599 dp = 4 Symbole
    • 600 dp und größer = 5 Symbole
31

ich hoffe, ich bin nicht zu spät, um die Partei auf sich warten.

Es ist wirklich keine große fette Lüge, aber ein kleines Versehen.

Das showAsAction Attribut muss definieren Sie sollten deshalb einen Namensraum im oberen Menü-Tag "http://schemas.android.com/apk/res-auto"

mit einem anderen Namespace definiert werden als xmlns:app="http://schemas.android.com/apk/res-auto"

und dann, dass wie so Ihr showAsAction Attribut zu definieren, folgen verwenden app:showAsAction="ifRoom"

das sollte fix it

+11

Ich hatte genau das gleiche Problem - und tatsächlich in meinem Fall - ich musste genau das Gegenteil machen: Verwenden Sie den Namespace android: showAsAction, um dieses Problem zu beheben. – KurtCobain

+4

Wenn Sie 'ActionBarActivity' verwenden, müssen Sie den Namespace verwenden. Mit 'Activity' können Sie Android verwenden: showAsAction – nickromano

+1

Ich habe es versucht, hat nicht für mich funktioniert. Android-Dokumentation unterstützt es nicht einmal. –

2

U se

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 
+4

Bitte erläutern Sie Ihre Antwort, da Code-Only-Antworten in der Regel unklar und schwieriger zu verstehen sind. – SuperBiasedMan

+0

funktioniert nicht immer noch zeigt nicht nur (...) Menü –

3

Verwendung app:showAsAction="always" statt android:showAsAction="always"

0

Mit diesem Code unten wird es immer

arbeiten
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 
    <item android:id="@+id/menu_share" android:title="Share" 
     android:orderInCategory="100" app:showAsAction="ifRoom" 
     android:actionProviderClass="android.widget.ShareActionProvider" /> 
</menu> 
Verwandte Themen