2014-10-29 4 views
6

Ich habe eine Anwendung mit einem split action bar Laden eines Aktionsmenüs.So zentrieren Sie das Aktionsmenü in der Symbolleiste

ich die ActionBar für die neue Symbolleiste geändert und die geteilte ActionBar durch eine andere Werkzeugleiste ersetzt im Standalone-Modus verwendet:

Toolbar toolbarBottom = (Toolbar) findViewById(R.id.toolbarBottom); 
toolbarBottom.inflateMenu(R.menu.ab_one_cam); 

Da das Aktionsmenü ist Stift rechts von der Symbolleiste in der Dokumentation angegeben: enter image description here

Aber ich würde die Symbole gerne in der Symbolleiste auf zentriert werden, wie es auf dem geteilten ActionBar war: enter image description here

Wie kann ich erreichen, dass das Aktionsmenü den gesamten verfügbaren Platz in der Symbolleiste einnimmt?

Die Symbolleiste ist diesem Menü gewidmet, es wird nichts hinzugefügt.

Antwort

Der Link führt zu einer Split-Toolbar akzeptierte Antwort. Wenn Sie wie ich Sie sehr einfach Bedürfnis haben, ist dieser Code gut genug:

public class SplitToolbar extends Toolbar { 

    public SplitToolbar(Context context) { 
     super(context); 
    } 

    public SplitToolbar(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public SplitToolbar(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void addView(View child, ViewGroup.LayoutParams params) { 
     if (child instanceof ActionMenuView) { 
      params.width = LayoutParams.MATCH_PARENT; 
     } 
     super.addView(child, params); 
    } 
} 

Kredit geht an: https://gist.github.com/dodgex/7bc81fd2cbb70a8d5117

+0

Überprüfen Sie auch: http://stackoverflow.com/questions/34546160/how-to-enable-split-action-bar/34546493#34546493 – piotrek1543

Antwort

6

In diesem Fall empfiehlt Chris Banes ActionMenuView statt Toolbar (siehe den Link unten, antworten # 6) zu verwenden. Abgesehen davon, in diesem Link finden Sie eine Lösung, wo der Kerl Unterklasse Toolbar, um die Spaltung funktioniert richtig.

https://code.google.com/p/android/issues/detail?id=77632#c2

Hoffe, dass es Ihnen hilft!

+1

Die Verwendung der SplitToolbar im Kommentar des Threads hat den Trick: https://gist.github.com/dodgex/7bc81fd2cbb70a8d5117 – grunk

1

Ich habe auch die letzten paar Wochen auf diese Frage eine Antwort zu finden versucht. Und das nächste, was ich gefunden habe, nutzt die Tatsache aus, dass die Toolbar nur eine ViewGroup ist. Alles, was Sie tun müssen, ist ein menu_items Layout zu erstellen, das ist nur ein LinearLayout mit gleich gewichteten menu items hinzugefügt. Ich weiß, dass dies keine ideale Lösung ist, aber ich habe trotzdem nicht gefunden, dass die Elemente verteilt werden, während das Standardmenü verwendet wird.

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar_btm" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:minHeight="?attr/actionBarSize" 
     android:background="@color/toolbar_bkgnd" 
     android:layout_alignParentBottom="true" 
     app:theme="@style/ThemeOverlay.AppCompat.ActionBar" > 

     <include layout="@layout/menu_items"/> 

     </android.support.v7.widget.Toolbar> 
+1

Können Sie noch inflateMenu() und setOnMenuItemClickListener() mit dieser Lösung verwenden? – grunk

+0

Ja und nein. Wenn Sie ein Überlaufmenü verwenden, können Sie weiterhin die Standardmethoden für diese verwenden, für die anderen Menüelemente müssen Sie jedoch die Layouts über XML festlegen und OnClick-Ereignisse selbst abhören. – MrEngineer13

+0

Kein Grund, eine Symbolleiste zu verwenden, besser eine benutzerdefinierte Ansicht zu erstellen :( – grunk