Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Mostrar flecha hacia atrás en la barra de herramientas Android

Estoy migrando de ActionBar a la Toolbar de Toolbar en mi aplicación. Pero no sé cómo mostrar y establecer el evento de clic en la flecha hacia atrás en la Toolbar de Toolbar como lo hice en Actionbar .
Introduzca aquí la descripción de la imagen

Con ActionBar , llamo mActionbar.setDisplayHomeAsUpEnabled(true) . Pero no hay un método similar como este.

¿Alguna vez alguien se ha enfrentado a esta situación y de alguna manera ha encontrado una manera de resolverlo?

  • Cambiar el color y el estilo de la barra de herramientas en SearchView
  • Barra de herramientas Appcompat no se muestra con el cajón de navegación
  • Barra de herramientas Android demasiado alta en modo horizontal
  • La barra de herramientas de Android appcompat se estira cuando se obtiene el enfoque de búsqueda
  • Configurar el icono de desbordamiento del menú para que sea blanco
  • ViewPager con la barra de herramientas y TabLayout tiene altura incorrecta
  • Hacer clic en icono de hamburguesa en la barra de herramientas no abre Cajón de navegación
  • ¿Cómo hacer clic en las vistas detrás de una barra de herramientas?
  • 10 Solutions collect form web for “Mostrar flecha hacia atrás en la barra de herramientas Android”

    Si está utilizando una ActionBarActivity , puede decirle a Android que use la Toolbar como ActionBar así:

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

    Y luego llama a

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

    trabajará. También puedes usarlo en Fragmentos que se adjuntan a ActionBarActivities , puedes usarlo así:

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

    Si no está utilizando ActionBarActivities o si desea obtener la flecha hacia atrás en una Toolbar que no está configurada como SupportActionBar , puede utilizar lo siguiente:

     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 está utilizando android.support.v7.widget.Toolbar , debe agregar el siguiente código a su AppCompatActivity :

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

    Veo un montón de respuestas, pero aquí está la mía que no se menciona antes. Funciona desde la 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); } 

    Puede utilizar el método setNavigationIcon de la barra de herramientas. 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(); } }); 

    Hay muchas maneras de lograr eso, aquí está mi favorito:

    Diseño:

     <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:navigationIcon="?attr/homeAsUpIndicator" /> 

    Actividad:

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

    Si estaba usando AppCompatActivity y se ha ido por la ruta de no usarlo, porque quería no obtener la ActionBar automática que proporciona, porque desea separar la Toolbar , debido a sus necesidades de diseño de material y CoordinatorLayout o AppBarLayout , a continuación, , considera esto:

    Todavía puede usar AppCompatActivity , no necesita dejar de usarlo sólo para poder usar un <android.support.v7.widget.Toolbar> en su xml. Simplemente desactive el estilo de barra de acción de la siguiente manera:

    En primer lugar, derivar un estilo de uno de los temas NoActionBar que te gusta en tu styles.xml , he utilizado Theme.AppCompat.Light.NoActionBar así:

     <style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primary</item> <!-- colorPrimaryDark is used for the status bar --> <item name="colorPrimaryDark">@color/primary_dark</item> ... ... </style> 

    En el manifiesto de tu aplicación, elige el tema de estilo infantil que acabas de definir, así:

      <activity android:name=".activity.YourSuperCoolActivity" android:label="@string/super_cool" android:theme="@style/SuperCoolAppBarActivity"> </activity> 

    En su Actividad Xml, si la barra de herramientas se define así:

     ... <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> ... 

    Entonces, y esta es la parte importante, usted fija la barra de la ayuda de la acción a AppCompatActivity que usted está ampliando, de modo que la barra de herramientas en su xml, se convierta en la barra de la acción. Creo que esta es una manera mejor, porque simplemente puedes hacer muchas cosas que ActionBar permite, como menús, título de actividad automática, manejo de selección de artículos, etc. sin recurrir a agregar controladores de clics personalizados, etc.

    En el comando OnCreate override de su actividad, haga lo siguiente:

     @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 } }); 

    Y para API 21+ android:navigationIcon

     <android.support.v7.widget.Toolbar android:navigationIcon="@drawable/back_arrow" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/> 

    Utilicé este método en la documentación de Google Developer :

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

    Si obtiene una excepción de puntero nulo, puede depender del tema. Pruebe a utilizar un tema diferente en el manifiesto o utilícelo alternativamente:

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

    A continuación, en el manifiesto, donde establezco la actividad principal para la actividad actual:

     <activity android:name="com.example.myapp.MyCurrentActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myapp.MyMainActivity" /> </activity> 

    ¡Espero que esto ayude!

     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()); } 

    Esto funcionó perfectamente

     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 } }); } } 

    Si no desea crear una Toolbar personalizada, puede hacer esto

     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(); } } } 

    En tu AndroidManifest.xml

     <activity android:name=".GalleryActivity" android:theme="@style/Theme.AppCompat.Light" > </activity> 

    También puedes poner esta etiqueta de android:theme="@style/Theme.AppCompat.Light" a <aplication> , para aplicar a todas las actividades

    Introduzca aquí la descripción de la imagen

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.