volver studio retroceso retroceder retorno regresar para flecha boton bar atras anterior agregar activity android android-actionbar android-actionbar-compat android-toolbar

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.



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