J'essaie le nouveau composant Barre d'outils et je rencontre des problèmes avec l'icône de navigation .. Je souhaite implémenter une icône personnalisée pour la navigation arrière:
Dans mon manifeste, j'ai défini un parent pour 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>
Ensuite, 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);
Ce qui me donne:
L'icône de retour n'est pas celle que j'ai définie avec setNavigationIcon()
! Quel que soit ce que je peux donner à la méthode, l’icône de navigation est toujours la flèche de retour.
J'ai essayé de supprimer l'association de parents 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 de flèche arrière par défaut et n’appelle pas setNavigationIcon()
, je n’ai aucune icône.
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
Actuellement, vous pouvez l'utiliser, en changeant l'ordre: (cela 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);
Spécifique à l’icône de navigation, c’est le bon ordre
// get the actionbar as Toolbar and set it up
Toolbar toolbar = (Toolbar) findViewById(R.id.signIn_toolbar);
setSupportActionBar(toolbar);
Informer la barre d'outils pour fournir une navigation arrière. Cela définira l'icône sur l'icône de matériau par défaut
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Plus tard, remplacez l'icône par l'icône personnalisée, dans mon cas, l'icône de retour Holo
toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp);
(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();
}
});
}
}
toolbar.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" />
Je viens de trouver la solution. C'est vraiment très simple:
mDrawerToggle.setDrawerIndicatorEnabled(false);
J'espère que cela vous aidera.
Utilisez setNavigationIcon pour le changer. N'oubliez pas de créer d'abord ActionBarDrawerToggle!
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);
J'ai essayé de configurer une barre d'outils comme @Gabriele Mariotti, mais j'avais un problème avec le titre. Alors j'ai mis de l'ordre à
toolbar.setTitle("Title")
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_good);
et il fonctionne.
Vous pouvez utiliser la méthode invalidate()
pour modifier l’état de la barre d’outils n’importe où .. .. Exemple:
Toolbar toolbar = (Toolbar)findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.mipmap.arrow_white);
toolbar.invalidate(); // restore toolbar
J'ai utilisé la méthode ci-dessous qui est vraiment un casse-tête de tous les précédents J'ai aussi constaté que 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();
}
});
}
Supprimer cette ligne de l'activité si vous avez ajouté
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
Puis mettre l'icône
getSupportActionBar().setHomeAsUpIndicator(icon);
Si vous ne souhaitez pas définir la barre d’outils comme 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)
}
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"/>
Essaye ça:
<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>