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.

  • Android: Intent.ACTION_SEND con EXTRA_STREAM no adjunta ninguna imagen al elegir la aplicación de Gmail en htc Hero
  • Análisis pasivo de Android BLE
  • Sugerencia de la búsqueda de Android de la red
  • Establecer la orientación horizontal en android en ambos lados
  • Implementación de un grupo de subprocesos dentro de un servicio
  • ActionBar en PreferenceFragment no volver a calcular la altura y el tamaño de fuente
  • ¿Alguna vez alguien se ha enfrentado a esta situación y de alguna manera ha encontrado una manera de resolverlo?

  • ¿Cómo se especifica, por ejemplo. Roboto-Medium o Roboto-Black en styles.xml
  • DDMS que muestra el explorador de archivos vacío para el emulador en línea
  • Mi aplicación Android de HTML está perdiendo valores almacenados en localStorage cuando se cierra. ¿Alguien más ve este problema?
  • Personalización de CheckBoxPreference vía android: widgetLayout
  • ¿Cómo crear un widget de Android con opciones?
  • API de Google Maps, ¿debo comprar?
  • 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.