studio - Android-Botón Atrás en la barra de título
go back button android studio (14)
En muchas aplicaciones (Calendario, Drive, Play Store) cuando toca un botón e ingresa una nueva actividad, el ícono en la barra de título se convierte en un botón Atrás, pero para la aplicación que estoy creando, eso no funciona. ¿Cómo hago para que ese ícono te lleve de vuelta a la pantalla anterior?
1.- Agregue la actividad a AndroidManifest.xml y asegúrese de proporcionar los metadatos:
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
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.myfirstapp.MainActivity" />
</activity>
2.- Agregue el siguiente código al método onCreate de la actividad:
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
3.- Anular onOptionsItemSelected y usar el método estático NavUtils.navigateUpFromSameTask () para navegar lanzando la pila.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar''s Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
Sin embargo, el uso de navigateUpFromSameTask () solo es adecuado cuando su aplicación es la propietaria de la tarea actual (es decir, el usuario comenzó esta tarea desde su aplicación). Si eso no es cierto y tu actividad se inició en una tarea que pertenece a una aplicación diferente, navegar hacia arriba debería crear una nueva tarea que pertenezca a tu aplicación, lo que requiere que crees una nueva pila.
Debe agregar el código mencionado a continuación en el archivo de manifiesto. Busque la actividad en la que desea agregar la funcionalidad de flecha hacia atrás. Si encuentras uno, entonces bien o crea la actividad
<activity android:name=".SearchActivity">
</activity>
A continuación, agregue las siguientes tres líneas de código en el medio.
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.raqib.instadate.MainActivity" />
Y no olvide agregar este fragmento de código en onCreate (); método de su actividad particular en el que necesita la flecha hacia atrás.
Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
setSupportActionBar(toolbar);
try{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}catch(NullPointerException e){
Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
}
Así es como resolví el problema. Gracias.
Finalmente logré agregar correctamente el botón Atrás a la barra de acciones / barra de herramientas
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
Hay dos pasos simples para crear un botón Atrás en la barra de título:
Primero, haga clic en el icono de la aplicación usando el siguiente código en la actividad cuya barra de título desea tener un botón Atrás en:
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Después de haber agregado el código anterior, verá una flecha hacia atrás a la izquierda del icono de la aplicación.
En segundo lugar, después de haber hecho lo anterior, aún debe crear un código que aproveche el evento click. Para hacerlo, tenga en cuenta que cuando hace clic en el ícono de la aplicación, se llama a un método onOptionsItemSelected. Para volver a la actividad anterior, agregue ese método a su actividad y coloque el código de Intent en él que lo regresará a la actividad anterior. Por ejemplo, digamos que la actividad a la que intenta regresar se llama MyActivity. Para volver, escriba el método de la siguiente manera:
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
¡Eso es!
(En la API para desarrolladores de Android, recomienda jugar con el manifiesto y agregar elementos como android: parentActivityName. Pero eso no parece funcionar para mí. Lo anterior es más simple y más confiable).
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
Y en tu actividad
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
La forma más sencilla y la mejor práctica como google explica aquí :
1.Agregue un elemento principal para su actividad infantil en AndroidManifest.xml
:
<activity
android:name=".ChildActivity"
android:parentActivityName=".ParentActivity" >
</activity>
2. Active el botón Atrás en su hijoActividad:
myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);
Funcionó para mí, espero que funcione para ti también.
Si está utilizando la nueva biblioteca de soporte para 5.1 en android studio, puede usar esto en su AppCompatActivity
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
actionBar.setDisplayShowHomeEnabled(true);
aclamaciones.
Si está utilizando una Barra de acciones, querrá leer en esta documentación http://developer.android.com/reference/android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean)
Luego, debe sobrescribir el método onOptionsItemSelected (MenuItem) y buscar el evento android.R.id.home para entrar. Luego, sabrá que el usuario ha hecho clic en el botón Atrás en la barra de acciones.
Si su actividad extiende Actividad
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
Si su acción extiende AppCompatActivity
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getSupportActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
No hay nada más que hacer, ver la acción de Agregar
[OPCIONAL] Para definir explícitamente la actividad principal, modifique su Manifest.xml de la siguiente manera:
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.YourActivity "
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.myfirstapp.MainActivity" />
</activity>
</application>
Consulte Especificar la actividad primaria
Si su actividad se extiende a AppCompatActivity
, debe anular el método onSupportNavigateUp()
manera:
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
Maneje su lógica en su método onBackPressed()
y simplemente llame a ese método en onSupportNavigateUp()
para que el botón Atrás en el teléfono y la flecha en la barra de herramientas hagan lo mismo.
También puede simplemente onBackPressed()
en su oyente OnClick. ¡Esto hace que su botón actúe como los botones predeterminados de "atrás / arriba" en las aplicaciones de Android!
También se puede hacer sin código al especificar una actividad principal en el manifiesto de la aplicación. Si desea un botón Atrás en la Actividad B que pasará a la Actividad A, simplemente agregue la Actividad A como padre de la Actividad B en el manifiesto.
Versión de peso ligero sin usar ActionBarActivity
que todavía tiene los mismos bahaviors aquí:
public class ToolbarConfigurer implements View.OnClickListener {
private Activity activity;
public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
toolbar.setTitle((this.activity = activity).getTitle());
if (!displayHomeAsUpEnabled) return;
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
toolbar.setNavigationOnClickListener(this);
}
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(activity);
}
}
Uso: Poner new ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true);
en onCreate
.
antes que nada en onCreate Function agregue la siguiente línea
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
y luego agregue la siguiente función en el código:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
usa este código
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
después de eso, escribe este código en el método onOptionsItemSelected
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
}