Barre d'outils icône de navigation jamais définie

j'essaie le nouveau composant de la barre d'outils et j'ai quelques problèmes avec l'icône de navigation. Je veux implémenter une icône personnalisée pour la navigation arrière:

dans mon manifeste j'ai mis un parent à mon activité:

<activity android:name=".CardsActivity" android:parentActivityName=".MainActivity">
    <!-- Parent activity meta-data to support API level 7+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

je déclare la barre d'outils comme ceci:

<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.lollitest.MainActivity" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/my_awesome_toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:layout_marginBottom="10dp"
        android:background="?attr/colorPrimary" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/my_awesome_toolbar"
        android:text="@string/hello_world" />

</RelativeLayout>

alors dans mon activité je configure la barre D'outils comme ceci:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
toolbar.setNavigationIcon(R.drawable.ic_good);
toolbar.setTitle("Title");
toolbar.setSubtitle("Sub");
toolbar.setLogo(R.drawable.ic_launcher);
setSupportActionBar(toolbar);

qui me donne : Toolbar with back button

l'icône de dos n'est pas celle que j'ai mise avec setNavigationIcon() ! Quel que soit le dessin que je donne à la méthode l'icône de navigation est toujours la flèche arrière.

j'ai essayé de supprimer l'association de parent dans le manifeste mais le seul effet est (évidemment) d'empêcher le bouton de revenir en arrière.

au contraire si je veux l'icône par défaut de la flèche arrière et ne pas appeler setNavigationIcon() Je n'ai pas d'icône du tout.

Quelle est la bonne façon de gérer l'icône de navigation dans la barre d'outils (personnalisée et par défaut) ?

NOte: j'exécute mon test sur Android 4.4

61
demandé sur Gabriele Mariotti 2014-10-23 13:37:08

13 réponses

Actuellement, vous pouvez l'utiliser, de modifier l'ordre: (il semble être un bug)

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

toolbar.setNavigationIcon(R.drawable.ic_good);
toolbar.setTitle("Title");
toolbar.setSubtitle("Sub");
toolbar.setLogo(R.drawable.ic_launcher);
112
répondu Gabriele Mariotti 2014-10-23 10:04:58

Spécifique à l'icône de navigation, c'est l'ordre correct

// get the actionbar as Toolbar and set it up
Toolbar toolbar = (Toolbar) findViewById(R.id.signIn_toolbar);
setSupportActionBar(toolbar);

informe la barre d'outils pour fournir la navigation arrière. Cela permet de définir l'icône à l'icône de matériel par défaut

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

plus tard outrepasser l'icône avec le personnalisé, dans mon cas L'icône Holo retour

toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp);
23
répondu Raffaeu 2015-03-10 14:25:20

(la réponse à user802421)

private void setToolbar() {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_action_back);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }
}

barre d'outils.xml

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/toolbar_height"
    android:background="?attr/colorPrimaryDark" />
19
répondu Alexey 2015-02-09 05:57:02

je viens de trouver la solution. C'est vraiment très simple:

mDrawerToggle.setDrawerIndicatorEnabled(false);

J'espère que ça vous aidera.

4
répondu xiaohu Wang 2015-05-12 05:21:46

utilisez setNavigationIcon pour le changer. n'oubliez pas de créer ActionBarDrawerToggle d'abord!

exemple de code travail pour moi:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    drawer = (DrawerLayout)findViewById(R.id.drawer_layout);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);

    toggle.syncState();

    toolbar.setNavigationIcon(R.drawable.ic_menu);
4
répondu Nguyên Phạm 2016-09-20 07:24:43

j'ai eu un problème simillar. Après un gros mal de tête, j'ai trouvé que mon ActionBarDrawerToggle modifiait l'icône, aussi quand il ne devrait pas modifier l'icône (parce que je n'ai pas donné de référence à la barre d'outils pour le composant de bascule). Ainsi, dans ma classe NavigationDrawerFragment (qui gère l'ouverture et la fermeture) dans la méthode setUp(...) j'ai mis

mDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);

et enfin, il a travaillé.

3
répondu Jakub Michalko 2015-03-22 15:03:12

j'ai essayé de configurer toolbar comme @Gabriele Mariotti, mais j'ai eu quelques problèmes avec le titre. Alors j'ai mis l'ordre à

toolbar.setTitle("Title")
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_good);

et ça marche.

3
répondu Valentin Blokhin 2015-05-10 19:45:40

j'ai utilisé la méthode ci-dessous, qui est vraiment une énigme de tous ceux ci-dessus. J'ai aussi découvert qu'onOptionsItemSelected n'est jamais activé.

    mDrawerToggle.setDrawerIndicatorEnabled(false);
    getSupportActionBar().setHomeButtonEnabled(true);

    Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
    if (toolbar != null) {
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }
3
répondu Lettings Mall 2015-08-28 15:30:20

vous pouvez utiliser la méthode invalidate() pour changer l'état de la barre d'outils en n'importe quel endroit. Exemple:

Toolbar toolbar = (Toolbar)findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

toolbar.setNavigationIcon(R.mipmap.arrow_white);
toolbar.invalidate();       // restore toolbar
3
répondu Ovechkin Pavel 2015-09-09 11:16:46

supprimer cette ligne si vous avez ajouté

 @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

puis l'icône

 getSupportActionBar().setHomeAsUpIndicator(icon);
1
répondu Nidhin 2017-01-23 10:04:18

essayez ceci:

  <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:toolbar="http://schemas.android.com/apk/res-auto"
        android:id="@+id/tool_drawer"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        toolbar:navigationIcon="@drawable/ic_navigation">

    </android.support.v7.widget.Toolbar>
0
répondu Janakipathi Chowdary 2016-08-10 10:22:26

travaille pour moi...

<android.support.v7.widget.Toolbar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/toolBar"
        android:background="@color/colorGreen"
        app:title="Title"
        app:titleTextColor="@color/colorBlack"
        app:navigationIcon="@drawable/ic_action_back"/>
0
répondu Thialyson Martins 2016-09-22 13:16:26

Dans le cas où vous ne souhaitez pas définir la barre d'outils la barre d'action, vous pouvez utiliser ceci:

        val toggle = ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        toggle.isDrawerSlideAnimationEnabled = false
        toggle.isDrawerIndicatorEnabled = false
        toggle.setHomeAsUpIndicator(AppCompatResources.getDrawable(this, ...))
        drawer!!.addDrawerListener(toggle)
        toggle.setToolbarNavigationClickListener {
            setDrawerOpened(!isDrawerOpened())
        }
        toggle.syncState()

fun setDrawerOpened(open: Boolean) {
    if (open == drawerLayout.isDrawerOpen(GravityCompat.START))
        return
    if (open)
        drawerLayout.openDrawer(GravityCompat.START)
    else drawerLayout.closeDrawer(GravityCompat.START)
}
0
répondu android developer 2018-01-02 10:09:38