Quando apro il menu di overflow nella mia applicazione, vedo un rettangolo pieno del colore di sfondo del menu visualizzato dietro il menu stesso attraverso le animazioni di inserimento/uscita. Ecco un'animazione che mostra questo (rallentato a velocità 75%):Rimuovere il rettangolo di colore di sfondo extra dal menu di overflow per entrare/uscire dalle animazioni?
la presenza di questo estranei spoglie rettangolo colorato la bella entrare animazioni/uscita! Come posso rimuoverlo mantenendo tutti gli altri stili Toolbar
?
ricerca
Ho letto un sacco di risposte sul Toolbar
styling su SO, e Chris Banes' propri post sull'argomento. Sembra che l'utilizzo dei tag style
/theme
su una base per-View
sia cambiato negli ultimi due anni, il che ha reso difficile la ricerca di informazioni definitive ovunque.
L'ho riprodotto usando le versioni dalla 22.1.0 alla 23.2.0 (compresa) della libreria di supporto.
file App
styles.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="ToolbarStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@color/colorPrimary</item>
</style>
</resources>
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:style="@style/ToolbarStyle" />
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Runtime Visualizza l'analisi
Come @Commonsware suggested, ho preso uno sguardo alla gerarchia della vista in fase di esecuzione. Modifica dei risultati:
menu ridotto (pulsante presente troppo pieno, senza misterioso rettangolo aggiuntivo):
menu espanso (vista menu di overflow visualizzati in separato Window
):
La vista dell'applicazione principale hie rarchy (come visualizzato nell'originale Window
) è invariato quando si confrontano i due stati del menu (fisso). La mia ipotesi è quindi che il rettangolo extra venga temporaneamente aggiunto alla finestra dell'applicazione principale durante le animazioni del menu e immediatamente rimosso al loro completamento. Non sono sicuro che sia perché questo sarebbe fatto - forse è un postumo di un vecchio (e ora inutilizzato) metodo di mostrare e nascondere il menu di overflow? Se la mia deduzione è corretta, allora questa domanda potrebbe essere risolta se possiamo determinare come prevenire questo comportamento transitorio ...
Che assomiglia a una separata 'View'. È possibile utilizzare Hierarchy Viewer o 'uiautomatorviewer' per determinare di cosa si tratta. – CommonsWare
@CommonsWare ha modificato la domanda per includere le informazioni sulla gerarchia della vista di runtime. – stkent
Hmmm ... Mi aspettavo che 'View' si fosse bloccato e semplicemente nascosto dietro il vero overflow. Sfortunatamente, Hierarchy View e 'uiautomatorviewer' sono veramente bravi nell'analisi statica. Non sono a conoscenza di alcun tool che usi un 'ViewTreeObserver' per provare a fare il logging dinamico di questa roba, anche se non ho ancora giocato con Stetho e potrebbe offrirlo. – CommonsWare