Stylo de navigation (menudrawer) Android 5 (style Lollipop)

J'utilise la bibliothèque menudrawer dans mon projet (celui-ci: https://github.com/SimonVT/android-menudrawer ).

Je met à jour mon application pour être compatible avec API21 (Android 5 Lollipop) et Design de matériaux. Lorsque vous utilisez cette bibliothèque avec API21, l'icône de Menudrawer semble mauvaise.

  • Comment ouvrir le tiroir de navigation sans barre d'action, ouvrir avec juste un bouton
  • Est-il possible de modifier la couleur de l'icône de la conception matérielle de xml dans Android?
  • Coloring Android Status Bar dans Nav Drawer
  • Prise en charge de la conception de matériel Android
  • Comment obtenir des tâches récentes sur Android "L"?
  • Les polices personnalisées ne fonctionnent pas dans la sucette?
  • Je souhaite réaliser une transition que vous pouvez voir dans le nouveau Play Store (une nouvelle transition de l'icône du menudrawer vers la flèche).

    Icône du magasin de navigation Play Store

    Quelle est la meilleure façon de le faire? Est-ce possible avec cette bibliothèque? La seule solution que je pense en ce moment est personnalisable. Mais peut-être que je peux utiliser native typable d'une façon ou d'une autre?

    3 Solutions collect form web for “Stylo de navigation (menudrawer) Android 5 (style Lollipop)”

    D'ACCORD. J'ai passé quelques heures avec une nouvelle API et je pense que le meilleur pour moi réécrivera mon tiroir de lib vers DrawerLayout natif.

    Mais peut-être cela sera utile pour quelqu'un ayant un problème similaire. J'ai créé un projet de test avec DrawerLayout (Android Studio -> New Project with menudrawer).

    Et puis j'ai vu le même problème. Icône incorrecte. Si vous voulez voir une animation chic et une bonne icône pour Android 5.0, assurez-vous d'utiliser:

    import android.support.**v7**.app.ActionBarDrawerToggle; 

    Prenez note sur v7. Par défaut, la classe Fragment a importé v4 et vous ne verrez pas une bonne icône.

    Autre chose. Après avoir changé en v7, vous devez réparer la fonction ActionBarDrawerToggle sur un nouveau constructeur. Et c'est tout. Vous verrez une nouvelle icône de tiroir.

    Tout d'abord, assurez-vous de mettre à jour le dernier SDK. Créez un nouveau projet dans Android Studio, puis ajoutez appcompat-v7.21.0. + Et appcompat-v4.21.0. + Bibliothèques dans votre version buid.gradle en tant que dépendance de gradle.

     compile 'com.android.support:appcompat-v7:21.0.2' compile 'com.android.support:support-v4:21.0.2' 

    Ajoutez primaryColor et primarycolorDark dans votre fichier color.xml.

     <resources> <color name="primaryColor">#2196F3</color> <color name="primaryColorDark">#0D47A1</color> </resources> 

    Ajoutez la valeur de la chaîne d'ouverture / fermeture de tiroir dans votre fichier strings.xml.

     <resources> <string name="app_name">Lollipop Drawer</string> <string name="action_settings">Settings</string> <string name="drawer_open">open</string> <string name="drawer_close">close</string> </resources> 

    Votre fichier de mise en page activity_my.xml ressemble à ceci:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <include layout="@layout/toolbar" /> <android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:id="@+id/drawerLayout" android:layout_height="match_parent"> <!-- activity view --> <RelativeLayout android:layout_width="match_parent" android:background="#fff" android:layout_height="match_parent"> <TextView android:layout_centerInParent="true" android:layout_width="wrap_content" android:textColor="#000" android:text="Activity Content" android:layout_height="wrap_content" /> </RelativeLayout> <!-- navigation drawer --> <RelativeLayout android:layout_gravity="left|start" android:layout_width="match_parent" android:background="#fff" android:layout_height="match_parent"> <ListView android:id="@+id/left_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#eee" android:background="#fff" android:dividerHeight="1dp" /> </RelativeLayout> </android.support.v4.widget.DrawerLayout> </LinearLayout> 

    Votre fichier de mise en page toolbar.xml ressemble à ceci:

     <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.Toolbar> 

    Votre MyActivity.java ressemble à ceci: Ici, votre activité doit étendre ActionBarActivity et définir votre barre d'outils comme barre d'action de support.

     import android.content.res.Configuration; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; public class MyActivity extends ActionBarActivity { private Toolbar toolbar; private DrawerLayout drawerLayout; private ActionBarDrawerToggle drawerToggle; private ListView leftDrawerList; private ArrayAdapter<String> navigationDrawerAdapter; private String[] leftSliderData = {"Home", "Android", "Sitemap", "About", "Contact Me"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); nitView(); if (toolbar != null) { toolbar.setTitle("Navigation Drawer"); setSupportActionBar(toolbar); } initDrawer(); } private void nitView() { leftDrawerList = (ListView) findViewById(R.id.left_drawer); toolbar = (Toolbar) findViewById(R.id.toolbar); drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); navigationDrawerAdapter=new ArrayAdapter<String>( MyActivity.this, android.R.layout.simple_list_item_1, leftSliderData); leftDrawerList.setAdapter(navigationDrawerAdapter); } private void initDrawer() { drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; drawerLayout.setDrawerListener(drawerToggle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.my, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } if (drawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } } 

    Créer le fichier style.xml dans le dossier values-21 pour Android Lollipop

     <?xml version="1.0" encoding="utf-8"?> <resources> <style name="myAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primaryColor</item> <item name="colorPrimaryDark">@color/primaryColorDark</item> <item name="android:statusBarColor">@color/primaryColorDark</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/black</item> </style> </resources> 

    Créez votre fichier style.xml dans le dossier des valeurs pour les anciennes versions, puis le lollipop Android

     <resources> <style name="myAppTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/primaryColor</item> <item name="colorPrimaryDark">@color/primaryColorDark</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/black</item> </style> </resources> 

    Votre AndroidManifest.xml ressemble à ceci:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nkdroid.com.lollipopdrawer" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/myAppTheme" > <activity android:name=".MyActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

    Pour référence seulement: vous pouvez télécharger le code source complet à partir d'ici: cliquez ici

    Découvrez les nouveaux composants lollipop lancés en mai 2015 par l'équipe Android.

    Bibliothèque d'assistance technique

    Blog sur la bibliothèque de support de conception

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.