Comment implémenter DrawerArrowToggle depuis la librairie Android appcompat v7 21

Donc, maintenant que Android 5.0 est sorti, je me demandais comment mettre en place les icons de la barre d’action animée.

Cette librairie la met en oeuvre pour moi mais depuis que la librairie appcompat v7 l’a fait, comment peut-elle être implémentée?

La bibliothèque le référence dans themes.xml

@style/Widget.AppCompat.DrawerArrowToggle 

Sous ce style

   

METTRE À JOUR

Je l’ai mis en œuvre en utilisant le v7 DrawerToggle. Cependant je ne peux pas le styler. S’il vous plaît aider

J’ai trouvé le style dans la v7 styles_base.xml

  ?android:attr/textColorSecondary 2dp 18dp 3dp 11.31dp 16dp 24dp true  

J’ai ajouté ceci à mes styles et n’ai pas fonctionné. Aussi ajouté à mon attr.xml

                   

Mais se bloque et dit erreur de type de couleur en le faisant. Qu’est-ce que je rate?

Tout d’abord, vous devez savoir que android.support.v4.app.ActionBarDrawerToggle est obsolète.

Vous devez le remplacer par android.support.v7.app.ActionBarDrawerToggle .

Voici mon exemple et j’utilise la nouvelle Toolbar d’ Toolbar pour remplacer la Toolbar d’action.

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.ssortingng.navigation_drawer_open, R.ssortingng.navigation_drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawerToggle.syncState(); } 

styles.xml

   

Vous pouvez lire les documents sur AndroidDocument # DrawerArrowToggle_spinBars

Cet atsortingbut est la clé pour implémenter l’animation de menu à flèche.

public static int DrawerArrowToggle_spinBars

Si les barres doivent pivoter ou non pendant la transition
Doit être une valeur booléenne, “true” ou “false”.

Donc, vous définissez ceci: true .

Ensuite, l’animation peut être présentée.

J’espère que cela peut vous aider.

Si vous utilisez la bibliothèque de support fournie DrawerLayout comme suggéré dans la formation Créer un tiroir de navigation , vous pouvez utiliser le nouveau fichier android.support. v7 .app.ActionBarDrawerToggle (remarque: différent de android.support. v4 .app.ActionBarDrawerToggle ):

affiche une icône Hamburger lorsque le tiroir est fermé et une flèche lorsque le tiroir est ouvert. Il s’anime entre ces deux états lorsque le tiroir s’ouvre.

Bien que la formation n’ait pas été mise à jour pour prendre en compte la dépréciation / nouvelle classe, vous devriez pouvoir l’utiliser presque exactement le même code – la seule différence dans l’implémentation est le constructeur.

J’ai créé une petite application qui avait des fonctionnalités similaires

Activité principale

 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.ssortingng.open, R.ssortingng.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(); } } 

Mon XML de cette activité

         

Mon XML de barre d’outils personnalisée

     

Mon style de thème

     #457C50 #580C0C  

Mes styles dans des valeurs-v21

     

Pour répondre à la partie mise à jour de votre question: pour définir l’icône / flèche du tiroir, vous avez deux possibilités:

Style la flèche elle-même

Pour ce faire, remplacez drawerArrowStyle dans votre thème comme drawerArrowStyle :

   

Ce n’est probablement pas ce que vous voulez , car l’ActionBar lui-même doit avoir un style cohérent avec la flèche, donc, très probablement, vous voulez l’option deux:

Thème le ActionBar / Toolbar

Remplacez l’ android:actionBarTheme ( actionBarTheme for appcompat) du thème de l’application globale par votre propre thème (que vous devriez probablement déduire de ThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar ) comme ThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar :

   

Une remarque importante à cet DrawerLayout est que lorsque vous utilisez une disposition personnalisée avec une Toolbar au lieu d’une mise en œuvre ActionBar standard (par exemple, si vous utilisez le DrawerLayoutNavigationView pour obtenir actionBarTheme atsortingbut actionBarTheme n’est évidemment pas récupéré automatiquement (parce qu’il est destiné à être pris en charge par AppCompatActivity pour le ActionBar par défaut), donc pour votre Toolbar personnalisée, n’oubliez pas d’appliquer votre thème manuellement:

   

– cela se traduira soit par la ThemeOverlay.AppCompat.ActionBar ThemeOverlay.AppCompat.ActionBar par défaut de ThemeOverlay.AppCompat.ActionBar soit par votre remplacement si vous définissez l’atsortingbut dans votre thème dérivé.

PS un petit commentaire à propos du substitut drawerArrowStyle et de l’atsortingbut spinBars – qui, selon de nombreuses sources, devrait être défini sur true pour obtenir l’animation tiroir / flèche. En spinBars , spinBars est true par défaut dans AppCompat (consultez le style Base.Widget.AppCompat.DrawerArrowToggle.Common ), vous n’avez pas besoin de remplacer actionBarTheme pour que l’animation fonctionne. Vous obtenez l’animation même si vous la remplacez et définissez l’atsortingbut sur false , c’est juste une animation différente, moins twirly. La chose importante ici est d’utiliser ActionBarDrawerToggle , c’est ce qui tire dans le dessin animé animé de fantaisie.

Je veux corriger un peu le code ci-dessus

  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.ssortingng.navigation_drawer_open, R.ssortingng.navigation_drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } 

et toutes les autres choses restront les mêmes …

Pour ceux qui ont des problèmes Drawerlayout barre de superposition

append android:layout_marginTop="?attr/actionBarSize" à la disposition racine du contenu du tiroir