Nachdem Android 5.0 veröffentlicht wurde, fragte ich mich, wie ich die animierten Aktionsleistensymbole implementieren sollte.
Diese Bibliothek hier implementiert es gut für mich, aber da die Appcompat v7-Bibliothek es hat, wie kann es implementiert werden?
Die Bibliothek verweist in der Datei themen.xml darauf
<item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
Unter diesem Stil
<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
AKTUALISIEREN
Ich habe dies mit dem v7 DrawerToggle implementiert. Ich kann es jedoch nicht stylen. Bitte helfen Sie
Ich fand das Styling dafür in der v7 styles_base.xml
<style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="">
<item name="color">?android:attr/textColorSecondary</item>
<item name="thickness">2dp</item>
<item name="barSize">18dp</item>
<item name="gapBetweenBars">3dp</item>
<item name="topBottomBarArrowSize">11.31dp</item>
<item name="middleBarArrowSize">16dp</item>
<item name="drawableSize">24dp</item>
<item name="spinBars">true</item>
</style>
Ich habe dies zu meinen Stilen hinzugefügt und nicht funktioniert. Auch zu meiner attr.xml hinzugefügt
<declare-styleable name="DrawerArrowToggle">
<!-- The drawing color for the bars -->
<attr name="color" format="color"/>
<!-- Whether bars should rotate or not during transition -->
<attr name="spinBars" format="boolean"/>
<!-- The total size of the drawable -->
<attr name="drawableSize" format="dimension"/>
<!-- The max gap between the bars when they are parallel to each other -->
<attr name="gapBetweenBars" format="dimension"/>
<!-- The size of the top and bottom bars when they merge to the middle bar to form an arrow -->
<attr name="topBottomBarArrowSize" format="dimension"/>
<!-- The size of the middle bar when top and bottom bars merge into middle bar to form an arrow -->
<attr name="middleBarArrowSize" format="dimension"/>
<!-- The size of the bars when they are parallel to each other -->
<attr name="barSize" format="dimension"/>
<!-- The thickness (stroke size) for the bar paint -->
<attr name="thickness" format="dimension"/>
</declare-styleable>
Aber stürzt ab und sagt dabei einen Farbtypfehler. Was vermisse ich?
mDrawerToggle.syncState();
behoben.Cannot resolve method setSupportActionBar(android.widget.Toolbar)
. Ich habe es auch mit versuchtandroid.support.v7.toolbar
. Weiß jemand warum das passiert?setSupportActionBar(mToolbar);
und auch definiert,<item name="spinBars">true</item>
aber Animation funktioniert nichtWenn Sie das von der Support Library bereitgestellte DrawerLayout verwenden, wie in der Schulung zum Erstellen einer Navigationsschublade vorgeschlagen , können Sie den neu hinzugefügten android.support verwenden. v7 .app.ActionBarDrawerToggle (Hinweis: unterscheidet sich von dem jetzt veralteten android.support. v4 .app.ActionBarDrawerToggle ):
Obwohl das Training nicht aktualisiert wurde, um die veraltete / neue Klasse zu berücksichtigen, sollten Sie in der Lage sein, fast genau denselben Code zu verwenden - der einzige Unterschied bei der Implementierung ist der Konstruktor.
quelle
ActionBarDrawerToggle
. Die kanonische Antwort des Herstellers von AppCompat enthält ein vollständiges Beispiel für die Struktur Ihres XML.Ich habe eine kleine Anwendung mit ähnlichen Funktionen erstellt
Hauptaktivität
Mein XML dieser Aktivität
Meine benutzerdefinierte Symbolleiste XML
Mein Themenstil
Meine Stile in values-v21
quelle
Um den aktualisierten Teil Ihrer Frage zu beantworten: Um das Schubladen-Symbol / den Schub zu formatieren, haben Sie zwei Möglichkeiten:
Gestalte den Pfeil selbst
Überschreiben Sie dazu
drawerArrowStyle
Ihr Thema wie folgt:Dies ist wahrscheinlich nicht das, was Sie wollen , da die ActionBar selbst ein konsistentes Design mit dem Pfeil haben sollte, also möchten Sie höchstwahrscheinlich die Option zwei:
Theme die ActionBar / Symbolleiste
Überschreiben Sie die
android:actionBarTheme
(actionBarTheme
für appcompat) Attribut der globalen Anwendung Thema mit Ihrem eigenen Thema (die Sie wahrscheinlich aus ableiten sollteThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar
wie so):Ein wichtiger Hinweis hierbei ist, dass bei Verwendung eines benutzerdefinierten Layouts mit a
Toolbar
ActionBar-Implementierung anstelle der Standardimplementierung (z. B. wenn Sie die KombinationDrawerLayout
-NavigationView
- verwendenToolbar
, um den Schubladeneffekt im Materialstil zu erzielen, der unter der durchscheinenden Statusleiste sichtbar ist) dasactionBarTheme
Attribut offensichtlich nicht ist Wird automatisch abgeholt (da diesAppCompatActivity
standardmäßig von der erledigt werden sollActionBar
).Toolbar
Vergessen Sie also nicht, Ihr Thema für Ihre Benutzerdefinition manuell anzuwenden:- Dadurch wird entweder die Standardeinstellung von AppCompat erreicht
ThemeOverlay.AppCompat.ActionBar
oder in Ihre Überschreibung aufgelöst, wenn Sie das Attribut in Ihrem abgeleiteten .PS ein kleiner Kommentar über die
drawerArrowStyle
Überschreibung und dasspinBars
Attribut - was viele Quellen vorschlagen, sollte eingestellt werdentrue
, um die Schubladen- / Pfeilanimation zu erhalten. Das Ding ist,spinBars
es isttrue
standardmäßig in AppCompat (check out dieBase.Widget.AppCompat.DrawerArrowToggle.Common
Stil), Sie müssen nicht außer Kraft setzenactionBarTheme
überhaupt die Animation zum Laufen zu bringen. Sie erhalten die Animation auch dann, wenn Sie sie überschreiben und auf das Attribut setzenfalse
. Es handelt sich lediglich um eine andere, weniger zwielichtige Animation. Das Wichtigste hier ist zu verwendenActionBarDrawerToggle
, es ist das, was in der ausgefallenen animierten Zeichnung zieht.quelle
Ich möchte den obigen Code ein wenig korrigieren
und alle anderen Dinge werden gleich bleiben ...
Für diejenigen, die Probleme beim
Drawerlayout
Überlagern der Symbolleiste habenandroid:layout_marginTop="?attr/actionBarSize"
Zum Stammlayout des Schubladeninhalts hinzufügenquelle
getSupportActionBar()
wenn Sie nur verlängernActivity
?ActionBarActivity