Comment mettre en œuvre DrawerArrowToggle d'Android appcompat v7 21 bibliothèque

? Bignadad @ | Original: StackOverFlow

Alors, maintenant que Android 5.0 a été libéré je me demandais comment mettre en œuvre les icônes de ActionBar animés .

Cette bibliothèque https://github.com/balysv/material-menu implémente bien pour moi mais depuis la bibliothèque de v7 appcompat l'a comment peut-il être mis en œuvre ?

Les références bibliothèque elle dans themes.xml

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

Sous ce style

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

UPDATE

Je ai eu cette mise en œuvre en utilisant le DrawerToggle v7 . Cependant, je ne peux pas le dénommer . Se il vous plaît Aide

Je ai trouvé le style pour elle dans le styles_base.xml v7

    <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>

Je ai ajouté cela à mes styles et n'a pas fonctionné. Aussi ajouté à ma attr.xml

<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>

Mais les accidents et dit couleur erreur de type en le faisant. Qu'est-ce que je suis absent ?



Top 5 Respuesta

1ianhanniballake @

Si vous utilisez la Bibliothèque Soutien fourni http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html comme suggéré dans le http://developer.android.com/training/implementing-navigation /nav-drawer.html, vous pouvez utiliser le nouvellement ajouté http://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html (note : http différente de la désormais obsolète : // développeur . android.com/reference/android/support/v4/app/ActionBarDrawerToggle.html ) :

montre une icône de Hamburger lorsque le tiroir est fermé et une flèche lorsque le tiroir est ouvert . Il anime entre ces deux états que le tiroir se ouvre .

Alors que la formation n'a pas été mis à jour pour prendre la dépréciation / nouvelle classe en compte, vous devriez être capable de l'utiliser presque exactement le même code - la seule différence dans sa mise en œuvre est le constructeur .



2Yong @

D'abord, vous devez savoir maintenant android.support.v4.app.ActionBarDrawerToggle est obsolète.

Vous devez le remplacer par «____» .

Voici mon exemple et je utilise la nouvelle «____» pour remplacer le «____» .

android.support.v7.app.ActionBarDrawerToggle

Toolbar

ActionBar

MainActivity.java

Vous pouvez lire les documents sur http://developer.android.com/reference/android/support/v7/appcompat/R.styleable.html#DrawerArrowToggle_spinBars

Cet attribut est la clé pour mettre en oeuvre l'animation menus à flèche.

publiques statiques DrawerArrowToggle_spinBars int   Si les barres doivent tourner ou non pendant la transition   Doit être une valeur booléenne, soit «vrai» ou «faux» .

Donc, vous définissez cette : «____» .

Puis l'animation peut être présenté .

Je espère que cela peut vous aider .

3Nitin Misra @

Je tiens à corriger 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);
    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();
}

et toutes les autres choses resteront même ...

Pour ceux qui ont des problèmes styles.xml barre d'outils superposant

ajouter <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> à disposition racine du contenu du tiroir

4Tim Rijckaert @

Je ai créé une petite application qui a des fonctionnalités similaires

MainActivity

<item name="spinBars">true</item>

Mon XML de cette activité

    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);
    }

Ma barre d'outils personnalisée XML

Drawerlayout

My Theme Style

android:layout_marginTop="?attr/actionBarSize"

Mes Styles des valeurs - v21

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();
    }
}