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);
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.
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 :(
Ajoutez simplement cette ligne à votre styles.xml
<item name="navigationIcon">@drawable/ic_back_arrow</item>
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
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
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)