So implementiere ich DrawerArrowToggle von Android appcompat v7 21 Bibliothek

Also jetzt, wo Android 5.0 veröffentlicht wurde, war ich frage mich, wie die animierten Actionbar Symbole zu implementieren.

Diese bibliothek hier implementiert es für mich gut, aber seit der appcompat v7 bibliothek hat es wie kann es umgesetzt werden?

  • Unterschied zwischen fokussierbarem und fokussierbareInTouchMode?
  • AnimationDrawable nicht spielen
  • Im Android Market können, wie häufig Entwickler ihre Apk-Dateien aktualisieren können?
  • Java android getResources () getIdentifier ()
  • Wie man den FCM ID Service erst startet, wenn eine bestimmte Aktivität ausgelöst wird?
  • Android ListView: Standardtext, wenn keine Elemente vorhanden sind
  • Die Bibliothek verweist darauf in themes.xml

    <item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item> 

    Unter diesem Stil

      <style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat"> 

    AKTUALISIEREN

    Ich habe das mit dem v7 DrawerToggle implementiert. Allerdings kann ich es 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 das meinen Stilen hinzugefügt und habe nicht geklappt. Auch 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 Abstürze und sagt Farbtyp Fehler, wenn dies zu tun. Was vermisse ich?

  • Dialog auf Android KitKat scheint zu schneiden
  • Wie können Sie die Farbe eines SeekBar dynamisch aktualisieren?
  • Android: Unbestimmte Fortschrittsanzeige in der TabHost-Aktivität anzeigen
  • Android RecyclerLesen Sie den letzten Artikel entfernen (Laufzeit) Fehler
  • Berechnen Sie den Lautstärkepegel vom Mikrofon auf Android
  • AsyncTask für die Aktualisierung von widget - wie man auf textviews in onPostExecute () zugreifen kann?
  • 5 Solutions collect form web for “So implementiere ich DrawerArrowToggle von Android appcompat v7 21 Bibliothek”

    Zuerst sollten Sie jetzt wissen, dass die android.support.v4.app.ActionBarDrawerToggle veraltet ist.

    Sie müssen das mit android.support.v7.app.ActionBarDrawerToggle ersetzen.

    Hier ist mein Beispiel und ich benutze die neue Toolbar , um die ActionBar zu ersetzen.

    MainActivity.java

     public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawerToggle.syncState(); } 

    Styles.xml

     <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/white</item> </style> 

    Sie können die Dokumente auf AndroidDocument # DrawerArrowToggle_spinBars lesen

    Dieses Attribut ist der Schlüssel zur Umsetzung der Menü-zu-Pfeil-Animation.

    Public static int DrawerArrowToggle_spinBars

    Ob Stäbe sich während des Übergangs drehen oder nicht
    Muss ein boolescher Wert sein, entweder "true" oder "false".

    Also <item name="spinBars">true</item> du das an: <item name="spinBars">true</item> .

    Dann kann die Animation präsentiert werden.

    Hoffe das kann dir helfen

    Wenn Sie die Support-Bibliothek verwenden, die DrawerLayout wie in der Erstellung einer Navigation Schublade Ausbildung vorgeschlagen , können Sie die neu hinzugefügte android.support. V7 .app.ActionBarDrawerToggle (Anmerkung: anders als die jetzt veraltete android.support v4 .app.ActionBarDrawerToggle ):

    Zeigt eine Hamburger-Ikone, wenn die Schublade geschlossen ist und ein Pfeil, wenn die Schublade offen ist. Es belebt zwischen diesen beiden Staaten, wie sich die Schublade öffnet.

    Während das Training nicht aktualisiert wurde, um die Abwertung / neue Klasse zu berücksichtigen, sollten Sie in der Lage sein, es fast genau den gleichen Code zu verwenden – der einzige Unterschied bei der Implementierung ist der Konstruktor.

    Ich habe eine kleine Anwendung erstellt, die ähnliche Funktionalität hatte

    Hauptaktivität

     public class MyActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer); android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.open, R.string.close ) { public void onDrawerClosed(View view) { super.onDrawerClosed(view); invalidateOptionsMenu(); syncState(); } public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); syncState(); } }; drawerLayout.setDrawerListener(actionBarDrawerToggle); //Set the custom toolbar if (toolbar != null){ setSupportActionBar(toolbar); } getSupportActionBar().setDisplayHomeAsUpEnabled(true); actionBarDrawerToggle.syncState(); } } 

    Mein XML dieser Aktivität

     <android.support.v4.widget.DrawerLayout 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" tools:context=".MyActivity" android:id="@+id/drawer" > <!-- The main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/toolbar_custom"/> </FrameLayout> <!-- The navigation drawer --> <ListView android:layout_marginTop="?attr/actionBarSize" android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#457C50"/> </android.support.v4.widget.DrawerLayout> 

    Meine benutzerdefinierte Symbolleiste XML

     <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/toolbar" android:background="?attr/colorPrimaryDark"> <TextView android:text="U titel" android:textAppearance="@android:style/TextAppearance.Theme" android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </android.support.v7.widget.Toolbar> 

    Mein Themenstil

     <resources> <style name="AppTheme" parent="Base.Theme.AppCompat"/> <style name="AppTheme.Base" parent="Theme.AppCompat"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primaryDarker</item> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/white</item> </style> <color name="primary">#457C50</color> <color name="primaryDarker">#580C0C</color> </resources> 

    Meine Styles in Werte-v21

     <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="AppTheme.Base"> <item name="android:windowContentTransitions">true</item> <item name="android:windowAllowEnterTransitionOverlap">true</item> <item name="android:windowAllowReturnTransitionOverlap">true</item> <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> <item name="android:windowSharedElementExitTransition">@android:transition/move</item> </style> </resources> 

    Um den aktualisierten Teil Ihrer Frage zu beantworten: Um die Schublade Symbol / Pfeil Stil, haben Sie zwei Optionen:

    Stil den Pfeil selbst

    Um dies zu tun, überschreiben Sie drawerArrowStyle in Ihrem Thema wie drawerArrowStyle :

     <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="drawerArrowStyle">@style/MyTheme.DrawerArrowToggle</item> </style> <style name="MyTheme.DrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="color">@android:color/holo_purple</item> <!-- ^ this will make the icon purple --> </style> 

    Das ist wohl nicht das, was du willst , denn die ActionBar selbst sollte mit dem Pfeil einheitliches Styling haben, also, wahrscheinlich, du willst die Option zwei:

    Theme der ActionBar / Toolbar

    Override the android:actionBarTheme ( actionBarTheme für appcompat) Attribut des globalen Anwendungsthemas mit deinem eigenen Thema (welches du wohl von ThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar ) ableiten ThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar :

     <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="actionBarTheme">@style/MyTheme.ActionBar</item> </style> <style name="MyTheme.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar"> <item name="android:textColorPrimary">@android:color/white</item> <!-- ^ this will make text and arrow white --> <!-- you can also override drawerArrowStyle here --> </style> 

    Eine wichtige Anmerkung hierbei ist, dass bei der Verwendung eines benutzerdefinierten Layouts mit einer Toolbar statt Aktie ActionBar-Implementierung (zB wenn Sie die DrawerLayoutNavigationViewToolbar Combo verwenden, um die Material-Stil Schublade Wirkung, wo es sichtbar ist unter lichtdurchlässigen Statusleiste), die actionBarTheme Attribut wird obviosly nicht automatisch abgeholt (weil es von der AppCompatActivity für die Standard- ActionBar ), also für deine benutzerdefinierte Toolbar nicht vergessen, dein Thema manuell anzuwenden:

     <!--inside your custom layout with DrawerLayout and NavigationView or whatever --> <android.support.v7.widget.Toolbar ... app:theme="?actionBarTheme"> 

    – Dies wird zu AppCompat's Standard- ThemeOverlay.AppCompat.ActionBar oder Ihr Override, wenn Sie das Attribut in Ihrem abgeleiteten Thema gesetzt zu lösen.

    PS ein wenig Kommentar über die drawerArrowStyle Override und die spinBars Attribut – die eine Menge von Quellen vorschlagen, sollte auf true , um die Schublade / Pfeil Animation zu bekommen. Thing ist, spinBars ist true standardmäßig in AppCompat (check out the Base.Widget.AppCompat.DrawerArrowToggle.Common Stil), müssen Sie nicht zu überschreiben actionBarTheme überhaupt, um die Animation zu arbeiten. Sie erhalten die Animation, auch wenn Sie es überschreiben und das Attribut auf false , es ist nur eine andere, weniger twirly Animation. Das Wichtigste hier ist, ActionBarDrawerToggle zu verwenden, es ist, was zieht in der Phantasie animiert ziehbar.

    Ich möchte ein bisschen den obigen Code korrigieren

      public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } 

    Und alle anderen Dinge bleiben gleich …

    Für diejenigen, die Probleme haben Drawerlayout Toolbar

    Add android:layout_marginTop="?attr/actionBarSize" zum Wurzellayout des Schubladeninhalts

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.