So legen Sie die erweiterte ActionView-Breite in SupportActionBar fest, um den verfügbaren Platz zu füllen

8

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

%Vor%

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?

    
Rafael T 12.02.2018, 10:22
quelle

2 Antworten

1

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 :

implementieren %Vor%

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

    
artkoenig 21.02.2018, 10:29
quelle
3

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.

%Vor%

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%     
niketshah09 14.02.2018 18:59
quelle