retroceso - retroceder android studio
Mostrar la flecha hacia atrĂ¡s en la barra de herramientas (15)
Estoy migrando de ActionBar
a Toolbar
en mi aplicación. Pero no sé cómo mostrar y configurar el evento de clic en la flecha Atrás en la Toolbar
de Toolbar
como lo hice en la Actionbar
de Actionbar
.
Con ActionBar
, llamo a mActionbar.setDisplayHomeAsUpEnabled(true)
. Pero no hay un método similar como este.
¿Alguna vez alguien ha enfrentado esta situación y de alguna manera ha encontrado una manera de resolverla?
En Kotlin sería
private fun setupToolbar(){
toolbar.title = getString(R.string.YOUR_TITLE)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
}
// don''t forget click listener for back button
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}
En AppCompatActivity
por ejemplo, puedes hacer
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.string.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;
}
}
En su archivo de manifiesto de la actividad donde desea agregar un botón de retroceso, usaremos la propiedad android: parentActivityName
<activity
android:name=".WebActivity"
android:screenOrientation="portrait"
android:parentActivityName=".MainActivity"
/>
P.S. Este atributo fue introducido en el nivel 16 de API.
Fácilmente puedes hacerlo.
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
Créditos: https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e
Hay muchas maneras de lograrlo, 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
}
});
Manera simple y fácil de mostrar el botón Atrás en la barra de herramientas
Pega este código en el método onCreate
if (getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
Pegue este método de anulación fuera del método onCreate
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()== android.R.id.home) {
finish();
}
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();
}
});
Si estaba usando AppCompatActivity
y ha seguido el camino de no usarlo, porque no quería obtener la ActionBar
automática que proporciona, porque quiere separar la Toolbar
, debido a sus necesidades de Diseño de Materiales y CoordinatorLayout
o AppBarLayout
, entonces , considera esto:
Aún puedes usar AppCompatActivity
, no necesitas dejar de usarlo solo para que puedas usar un <android.support.v7.widget.Toolbar>
en tu xml. Apaga el estilo de la barra de acción de la siguiente manera:
Primero, derive un estilo de uno de los temas de NoActionBar que le gustan en su styles.xml
, usé 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 su aplicación, elija el tema de estilo infantil que acaba de definir, así:
<activity
android:name=".activity.YourSuperCoolActivity"
android:label="@string/super_cool"
android:theme="@style/SuperCoolAppBarActivity">
</activity>
En tu Activity 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, establece la barra de acción de soporte en la AppCompatActivity que está extendiendo, de modo que la barra de herramientas en su xml se convierta en la barra de acción. Creo que esta es una mejor manera, porque simplemente puede hacer las muchas cosas que permite ActionBar, como menús, títulos de actividades automáticas, manejo de selección de elementos, etc. sin tener que recurrir a la adición de controladores de clics personalizados, etc.
En la anulación de onCreate 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);
}
Si está utilizando un ActionBarActivity
entonces 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 usar eso en Fragmentos que están adjuntos 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 su SupportActionBar
, puede usar 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;
}
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();
}
return super.onOptionsItemSelected(item);
}
}
En tu AndroidManifest.xml
<activity
android:name=".GalleryActivity"
android:theme="@style/Theme.AppCompat.Light"
>
</activity>
también puede poner este android:theme="@style/Theme.AppCompat.Light"
en la etiqueta <aplication>
, para aplicar a todas las actividades
Utilicé este método de la documentación de desarrolladores de Google :
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Si obtienes una excepción de puntero nulo, podría depender del tema. Intente usar un tema diferente en el manifiesto o use esto alternativamente:
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Luego, en el manifiesto, donde configuro 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!
Veo muchas respuestas pero aquí está la mía que no se menciona antes. Funciona desde 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);
}
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
}
});
}
}
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"/>
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());
}