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