webentwicklung-frage-antwort-db.com.de

Android Lollipop, Popup-Menü vom Titel in der Symbolleiste hinzufügen

Ich kann nicht sehen, wie das Hinzufügen eines Popup-Menüs aus dem Titel erfolgt, wie in vielen Materialdesign-Beispielen gezeigt. Jede Hilfe wäre sehr dankbar.

Toolbar Popup From Title

45
Matt Wear

Sie müssen der Symbolleiste einen Spinner hinzufügen:

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_height="?attr/actionBarSize"
        Android:layout_width="match_parent"
        Android:background="?attr/colorPrimary">

    <Spinner
            Android:id="@+id/spinner_nav"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />

</Android.support.v7.widget.Toolbar>

Sie müssen dann den Standardtitel deaktivieren:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

Sie können den Spinner dann wie gewünscht in Ihrer Aktivität/Fragment abrufen und einrichten.

96
Chris Banes

Ich bin auf diese Frage gestoßen, als ich versuchte, eine Lösung zu finden, um zu verhindern, dass das Popup den Spinner überlagert. Ich möchte hier eine alternative Lösung für diese Frage lassen, da es möglich ist, den Spinner mithilfe der menu.xml als Symbolleiste hinzuzufügen Gut

activity_main.xml

<LinearLayout 
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"

Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:fitsSystemWindows="true">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorAccent" />

</Android.support.design.widget.AppBarLayout>

 <!-- Other layout widgets -->

</LinearLayout>

menu_main.xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">

<item
    Android:id="@+id/spinner"
    Android:title="Spinning"
    app:actionViewClass="Android.widget.Spinner"
    app:showAsAction="always" />

<!-- Other items -->

</menu>

Ihre Aktivität

Es ist notwendig, die Methode onCreateOptionMenu () zu überschreiben und dann die zuvor erstellte Menüdatei mit getMenuInflater () aufzublasen. 

Sie müssen auch den Spinner-Gegenstand erhalten und einen Adapter darauf einstellen, wie Sie es normalerweise tun würden.

   @Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);

    //Get Spinner item from menu

    MenuItem spinnerMenuItem = menu.findItem(R.id.spinner);
    final Spinner spinner = (Spinner) MenuItemCompat.getActionView(spinnerMenuItem);

    //Set adapter whichever way you prefer (from the resource or manually)

    final ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter
            .createFromResource(this, R.array.items_array, Android.R.layout.simple_spinner_dropdown_item);
    spinnerAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerAdapter);

    return true;

}

Style.xml

Schließlich, wenn Sie Ihren Spinner anpassen möchten

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:spinnerStyle">@style/spinner_style</item>
</style>

<style name="spinner_style" parent="Widget.AppCompat.Spinner">
    <item name="Android:dropDownVerticalOffset">40dip</item>
    <!--<item name="Android:dropDownHorizontalOffset">0dip</item>-->
    <item name="overlapAnchor">false</item>

    <!--Other customizations-->

</style>

0
Ruan_Lopes