web-dev-qa-db-fra.com

Comment changer l'indicateur HomeAsUp dans la nouvelle barre d'outils AppCompat?

Je veux changer l'indicateur par défaut ActionBar homeAsUp (dessinable) dans ma barre d'outils AppCompat. Comment y parvenir? Seule la flèche par défaut apparaît.

styles (idem pour le niveau des autres API):

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <!-- API 14 theme customizations can go here. -->
        <item name="Android:windowActionBarOverlay">true</item>
        <item name="Android:homeAsUpIndicator">@drawable/home</item>

        <!-- Support library compatibility -->
        <item name="windowActionBarOverlay">true</item>
        <item name="homeAsUpIndicator">@drawable/home</item>
</style>

Barre d'outils dans ma disposition de fragment:

<Android.support.v7.widget.Toolbar
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/my_awesome_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@Android:color/transparent"
        Android:homeAsUpIndicator="@drawable/home"
        Android:minHeight="?attr/actionBarSize"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/AppTheme" />

En fragment:

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

        activity.setSupportActionBar(toolbar);

        ActionBar actionBar = activity.getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);
24
dasar

Pour changer d'icône, il suffit d'appeler au moment de l'exécution:

toolbar.setNavigationIcon(R.drawable.home);

Astuce avec des styles/thèmes ne fonctionnant pas.

Comment activer homeAsUp ou appeler setDisplayHomeAsUpEnabled () sur la barre d'outils autonome avec appcompat v21

30
dasar

J'ai essayé setHomeAsUpIndicator(int resId), ça marche.

private void initToolbar ( Toolbar mToolbar ) {

    mToolbar.setTitleTextColor ( getResources ().getColor ( R.color.main_title ) );
    setSupportActionBar ( mToolbar );

    ActionBar actionbar = getSupportActionBar ();
    actionbar.setDisplayHomeAsUpEnabled ( true );
    actionbar.setHomeAsUpIndicator ( R.drawable.ic_action_back );
}

Mais mToolbar.setNavigationIcon(R.drawable.ic_action_back) ne fonctionne pas :(

15
RockerFlower

Ajoutez simplement cette ligne à votre styles.xml

        <item name="navigationIcon">@drawable/ic_back_arrow</item>
14
Ioane Sharvadze

Si Android.support.v7.app.ActionBarDrawerToggle utilisé avec DrawerLayout et Toolbar, vous pouvez changer l'icône homeAsUp avec le code suivant:

//set home as up indicator
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_up_indicator);

//remove home as up indicator
mDrawerToggle.setHomeAsUpIndicator(null);

pour afficher l'indicateur homeAsUpIndicator au lieu de l'indicateur home, procédez comme suit:

mDrawerToggle.setDrawerIndicatorEnabled(false);

Documents:

ActionBarDrawerToggle # setHomeAsUpIndicatorActionBarDrawerToggle # setDrawerIndicatorEnabled

9
Nikolay Nikiforchuk

je viens de découvrir que cela fonctionne réellement toolbar.setNavigationIcon (R.drawable.ic_action_back) et voici le code pour le faire fonctionner.

  @Override
   protected void onCreate(Bundle savedInstanceState) {

   .....
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_action_back);

Publiez le code suivant dans onOptionsItemSelected (élément MenuItem)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   ......
    if (id == Android.R.id.home) {
        startActivity(new Intent(this, MainActivity.class));
        return true;
    }

    return super.onOptionsItemSelected(item);
}

Remarque L'activité principale dans ce code est l'activité en cours à laquelle je veux que mon bouton Retour ou Accueil se rende. J'espère que ça aide

3
Victor Marlz Ojo

Malheureusement, si cette ligne de style est utilisée dans une barre d'outils/d'application AppCompat communément partagée avec d'autres activités de l'application, y compris l'activité principale, le "navigationIcon" spécifié sera automatiquement affiché, contrairement à la valeur par défaut standard HomeAsUpIndicator , qui n'est pas affiché sauf si explicitement activé comme souhaité dans une activité, généralement comme suit: (dans le onCreate () )

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Avec la ligne de style ci-dessus, car elle se comporte de manière opposée, de manière similaire, l'indicateur doit être explicitement désactivé si l'on ne souhaite pas l'afficher, comme sur l'activité principale, comme suit : (dans le onCreate () )

getSupportActionBar().setDisplayHomeAsUpEnabled(false);

(comme observé sur Android 4.0.4, 4.3 et 4.4.2)

2
Dan K