Afficher la flèche arrière sur la barre d’outils

Je migre d’ ActionBar vers Toolbar dans mon application. Mais je ne sais pas comment afficher et définir un événement de clic sur la flèche arrière sur la Toolbar d’ Toolbar comme je l’ai fait sur Actionbar .

entrer la description de l'image ici

Avec ActionBar , j’appelle mActionbar.setDisplayHomeAsUpEnabled(true) . Mais il n’y a pas de méthode similaire comme celle-ci.

Quelqu’un a-t-il déjà été confronté à cette situation et trouvé un moyen de le résoudre?

    Si vous utilisez un ActionBarActivity vous pouvez indiquer à Android d’utiliser la Toolbar d’ Toolbar comme ActionBar comme ceci:

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

    Et puis appelle à

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); 

    marchera. Vous pouvez également utiliser cela dans Fragments attachés à ActionBarActivities vous pouvez l’utiliser comme ceci:

     ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true); 

    Si vous n’utilisez pas ActionBarActivities ou si vous souhaitez obtenir la flèche arrière sur une Toolbar non définie comme SupportActionBar vous pouvez utiliser les éléments suivants:

     mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back)); mActionBar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //What to do on back clicked } }); 

    Si vous utilisez android.support.v7.widget.Toolbar , vous devez alors append le code suivant à votre AppCompatActivity :

     @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

    Je vois beaucoup de réponses mais voici la mienne qui n’est pas mentionnée auparavant. Cela fonctionne à partir de l’API 8+.

     public class DetailActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); // toolbar Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // add back arrow to toolbar if (getSupportActionBar() != null){ getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // handle arrow click here if (item.getItemId() == android.R.id.home) { finish(); // close this activity and return to preview activity (if there is any) } return super.onOptionsItemSelected(item); } 

    Il y a plusieurs façons d’y parvenir, voici mon préféré:

    Disposition:

      

    Activité:

      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // back button pressed } }); 

    vous pouvez utiliser la méthode setNavigationIcon de la barre d’outils. Android Doc

     mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); mToolBar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handleOnBackPress(); } }); 

    J’ai utilisé cette méthode à partir de Google Developer Documentation :

     @Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); } 

    Si vous obtenez une exception de pointeur nul, cela peut dépendre du thème. Essayez d’utiliser un thème différent dans le manifeste ou utilisez-le alternativement:

     @Override public void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 

    Ensuite, dans le manifeste, où je définis l’activité parent pour l’activité en cours:

         

    J’espère que cela t’aidera!

    Si vous ne voulez pas créer une Toolbar personnalisée, vous pouvez faire comme ça

     public class GalleryActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setTitle("Select Image"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); } return super.onOptionsItemSelected(item); } } 

    Dans vous AndroidManifest.xml

       

    vous pouvez également mettre cet android:theme="@style/Theme.AppCompat.Light" à la , pour appliquer à toutes les activités

    entrer la description de l'image ici

    Si vous utilisiez AppCompatActivity et que vous ne souhaitiez pas l’utiliser, car vous ne vouliez pas obtenir la Toolbar automatique fournie, car vous souhaitez séparer la Toolbar , en raison de vos besoins de conception de matériel et de CoordinatorLayout ou AppBarLayout , , considère ceci:

    Vous pouvez toujours utiliser AppCompatActivity , vous n’avez pas besoin de l’arrêter pour pouvoir utiliser un dans votre fichier XML. Désactivez simplement le style de la barre d’action comme suit:

    D’abord, dérivez un style de l’un des thèmes NoActionBar que vous aimez dans votre styles.xml , j’ai utilisé Theme.AppCompat.Light.NoActionBar comme Theme.AppCompat.Light.NoActionBar :

      

    Dans le manifeste de votre application, choisissez le thème de style enfant que vous venez de définir, comme suit:

        

    Dans votre activité XML, si la barre d’outils est définie comme suit:

     ...  ... 

    Ensuite, et c’est la partie importante, vous définissez la barre d’actions de support sur AppCompatActivity que vous étendez, de sorte que la barre d’outils de votre fichier XML devienne la barre d’action. Je pense que c’est un meilleur moyen, car vous pouvez simplement faire les nombreuses choses qu’ActionBar permet, comme les menus, le titre d’activité automatique, la gestion de la sélection d’éléments, etc. sans avoir à append des gestionnaires de clics personnalisés, etc.

    Dans la substitution onCreate de votre activité, procédez comme suit:

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_super_cool); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //Your toolbar is now an action bar and you can use it like you always do, for example: getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); // Implemented by activity } }); 

    Et pour API 21+ android:navigationIcon

      
     MyActivity extends AppCompatActivity { private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { ... toolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(arrow -> onBackPressed()); } 

    Cela a parfaitement fonctionné

     public class BackButton extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chat_box); Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar); chatbox_toolbar.setTitle("Demo Back Button"); chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white)); setSupportActionBar(chatbox_toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Define Back Button Function } }); } } 

    Dans votre fichier manifeste pour l’activité où vous souhaitez append un bouton Retour, nous utiliserons la propriété Android: parentActivityName

       

    PS Cet atsortingbut a été introduit dans API Level 16.

    Moyen simple et facile pour afficher le bouton sur la barre d’outils

    Collez ce code dans la méthode onCreate

      if (getSupportActionBar() != null){ getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } 

    Collez cette méthode de substitution en dehors de la méthode onCreate

     @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()== android.R.id.home) { finish(); } return super.onOptionsItemSelected(item); } 

    Dans AppCompatActivity par exemple, vous pouvez faire

     public class GrandStatActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grand_stat); } @Override public void onResume() { super.onResume(); // Display custom title ActionBar actionBar = this.getSupportActionBar(); actionBar.setTitle(R.ssortingng.fragment_title_grandstats); // Display the back arrow getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } // Back arrow click event to go to the parent Activity @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } }