web-dev-qa-db-fra.com

Tiroir de navigation de style design Android 5.0 pour KitKat

Je vois qu'Android a introduit de nouvelles icônes de tiroir de navigation, icône de tiroir et icône de flèche vers l'arrière. Comment pouvons-nous utiliser cela dans les applications supportées par KitKat? Consultez la dernière version de Google de l'application Kiosque, qui contient les dernières icônes et animations de tiroirs de navigation. Comment pouvons-nous mettre cela en œuvre?

J'ai essayé de régler minSDK à 19 et complileSDK à 21, mais il utilise les anciennes icônes de style. Est-ce auto-implémenté?

61
nomongo

Vous devez utiliser la nouvelle barre d'outils dans appcompat v21 et la nouvelle variable ActionBarDrawerToggle également présente dans cette bibliothèque.

Ajoutez la dépendance gradle à votre fichier gradle: 

compile 'com.Android.support:appcompat-v7:21.0.0'

Votre disposition activity_main.xml ressemblerait à quelque chose comme ça:

<!--I use Android:fitsSystemWindows because I am changing the color of the statusbar as well-->
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/main_parent_view"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:fitsSystemWindows="true">

    <include layout="@layout/toolbar"/>

    <Android.support.v4.widget.DrawerLayout
        Android:id="@+id/drawer_layout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <!-- Main layout -->
        <FrameLayout
            Android:id="@+id/main_fragment_container"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />

        <!-- Nav drawer -->
        <fragment
            Android:id="@+id/fragment_drawer"
            Android:name="com.example.packagename.DrawerFragment"
            Android:layout_width="@dimen/drawer_width"
            Android:layout_height="match_parent"
            Android:layout_gravity="left|start" />
    </Android.support.v4.widget.DrawerLayout>
</LinearLayout>

La disposition de votre barre d’outils ressemblerait à quelque chose comme ça:

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

Votre activité doit s'étendre de:

ActionBarActivity

Lorsque vous trouvez vos vues (tiroir et barre d’outils) dans l’activité, définissez la barre d’outils comme barre d’assistance et définissez setDrawerListener:

setSupportActionBar(mToolbar);
mDrawerToggle= new ActionBarDrawerToggle(this, mDrawerLayout,mToolbar, R.string.app_name, R.string.app_name);
mDrawerLayout.setDrawerListener(mDrawerToggle);

Après cela, il vous suffit de vous occuper des éléments de menu et de l'état DrawToogle:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = new MenuInflater(this);
    inflater.inflate(R.menu.menu_main,menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public void onBackPressed() {
    if(mDrawerLayout.isDrawerOpen(Gravity.START|Gravity.LEFT)){
        mDrawerLayout.closeDrawers();
        return;
    }
    super.onBackPressed();
}

La mise en œuvre est la même qu’elle était avant la barre d’outils et vous recevez gratuitement l’animation flèche. Pas de maux de tête. Pour plus d'informations, suivez:

Si vous souhaitez afficher le tiroir au-dessus de la barre d’outils et sous la barre d’état, veuillez vous référer à cette question .

EDIT: Utilisez NavigationView depuis la bibliothèque de conception. Tutoriel pour apprendre à utiliser ici: http://antonioleiva.com/navigation-view/

130
jpardogo

La réponse n'est plus utile. En le laissant ici uniquement à des fins historiques, car le moment de la publication d'Android n'avait pas la mise en œuvre :)


Beaucoup de bibliothèques peuvent maintenant atteindre cet objectif.

Choix 1 - https://github.com/neokree/MaterialNavigationDrawer

Autres 

18
SSR

Si vous voulez le vrai tiroir de navigation avec un style de conception de matériau (défini ici
J'ai implémenté une bibliothèque personnalisée qui fait exactement cela. 
Vous pouvez le trouver ici

2
NeoKree

Prise en charge des commentaires principaux avec la nouvelle présentation générée de main_content. Je remplace simplement la disposition de contenu incluse par DrawerLayout. Gardez à l'esprit que votre tiroir doit avoir ce layout_behavior: appbar_scrolling_view_behavior

structure du conteneur supérieur https://github.com/juanmendez/jm_Android_dev/blob/master/01.fragments/06.fragments_with_rx/app/src/main/res/layout/activity_recycler.xml#L17

contenu inclus https://github.com/juanmendez/jm_Android_dev/blob/master/01.fragments/06.fragments_with_rx/app/src/main/res/layout/content_recycler.xml#L9

see the navigation drawer!!

0
Juan Mendez