Ich versuche, ein MenuItem mit einem actionView
einzurichten, wie hier hier beschrieben.
In meinem Fall ist das ActionView
Widget eine SeekBar .
Das Problem ist, dass, wenn die ActionView
auf Icon-Klick angezeigt wird, ihre Breite viel kleiner als erwartet ist, wie Sie in den folgenden Screenshots sehen können:
Die Dokumentation sagt:
Wenn sich das Widget in der App-Leiste befindet, sollte die App das Widget als anzeigen ein Symbol. Wenn sich das Widget im Überlaufmenü befindet, sollte die App angezeigt werden das Widget als Menüelement. Wenn der Benutzer mit der Aktion interagiert Ansicht, wird es erweitert, um die App-Leiste zu füllen .
In meinem Fall wird nichts "erweitert". Anstatt die gesamte Breite von ActionBar
zu übernehmen, ist es winzig.
Um es zu beheben, habe ich versucht, eine andere Ansicht wie eine EditText
zu verwenden, aber ähnliche Ergebnisse erzielt. (Der EditText ist beim Start klein, erweitert sich aber beim Schreiben darauf).
Es scheint mit einem android.support.v7.widget.SearchView
zu funktionieren, wie es in den Dokumenten verwendet wird.
Ich habe es auch mit Theme.AppCompat.Light.DarkActionBar
oder Theme.AppCompat.Light.NoActionBar
versucht, indem ich eine Toolbar im Layout ohne erkennbaren Unterschied bereitgestellt habe.
Hier ist der Code, den ich benutzt habe:
MainActivity
%Vor%app_menu.xml
%Vor% Ich habe auch versucht, app:actionViewLayout=@layout/seekbar_layout
anstelle von actionViewClass
wo seekbarLayout war so etwas
Wo ich auch verschiedene Versionen von ViewGroups
wie Linear, Relative oder FrameLayouts probiert habe oder versucht habe, eine feste Breite meiner SeekBar ohne Erfolg zu setzen.
Was vermisse ich oder mache ich hier falsch?
Die "Magie" findet in Toolbar.expandItemActionView
statt. Diese Methode überschreibt die Layoutparameter des erweiterten ActionView
und setzt die Breite auf wrap_content
. Jetzt zu einer möglichen Lösung:
Toolbar.expandItemActionView
überprüft, ob ActionView
die Schnittstelle CollapsibleActionView
implementiert und ruft die Methode CollapsibleActionView.onActionViewExpanded
auf, falls dies der Fall ist. Dies ist Ihre Chance, die Layout-Parameter zu korrigieren und die Breite auf match_parent
zu setzen. Leiten Sie eine benutzerdefinierte Klasse von SeekBar
ab und lassen Sie sie CollapsibleActionView
:
Benutze es in deinem Menüpunkt über app:actionViewClass
.
Stellen Sie außerdem sicher, dass Sie das entsprechende CollapsibleActionView
verwenden.
Wenn Sie android.support.v4.widget.Toolbar
verwenden, benötigen Sie auch android.support.v7.view.CollapsibleActionView
.
Wenn Sie ein android.widget.Toolbar
verwenden, verwenden Sie android.view.CollapsibleActionView
Wenn Sie die Suchleiste als Menüelement hinzufügen, wird die Größe von default menu item
übernommen.
Wenn Sie Seekbar
benötigen, um über die appbar
zu erweitern, können Sie Ihre eigene Toolbar
erstellen und SeekBar
wie folgt hinzufügen.
Mache das Thema deines activity
als Theme.AppCompat.Light.NoActionBar
und führe das application
aus. Sie sollten in der Lage sein, die seekbar
übergreifend über die toolbar
zu sehen.
In Ihrer Aktivität füllen Sie einfach das Menü auf und es wird seine Größe nehmen. Es funktioniert für mich und ich hoffe, dass seekbar mit Menüelement auch für Sie arbeiten wird.
%Vor%Tags und Links android android-layout android-actionbar