¿Cómo cambio el título y el icono de la barra de acción de Android?

225

Estoy tratando de hacer algunas cosas en ActionBar en Android.

Ya he agregado nuevos elementos en el lado derecho de la barra de acción.

¿Cómo puedo cambiar el lado izquierdo de la barra de acción? Quiero cambiar el ícono y el texto, y quiero agregar un "Botón Atrás" en la barra de acción para las otras pantallas

Barra de acción de Android

Allan Ramírez
fuente

Respuestas:

514

Esto es muy simple de lograr

Si desea cambiarlo en el código, llame al:

setTitle("My new title");
getActionBar().setIcon(R.drawable.my_icon);

Y establece los valores a lo que quieras.

O, en el archivo XML manifiesto de Android:

<activity android:name=".MyActivity" 
       android:icon="@drawable/my_icon" 
       android:label="My new title" />  

Para habilitar el botón de retroceso en su aplicación use:

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

Todo el código debe colocarse en su onCreatepara que el cambio de etiqueta / ícono sea transparente para el usuario, pero en realidad se puede invocar en cualquier lugar durante el ciclo de vida de la actividad.

dymmeh
fuente
23
Si está utilizando la biblioteca de soporte para agregar la barra de acción, use en getSupportActionBarlugar de getActionBar.
Rick Pastoor
3
getActionBar().setHomeButtonEnabled(true)usa el nivel de API 14 o superior, si solo desea la funcionalidad del botón de retroceso en las API más antiguas y más nuevas que solo necesitagetActionBar().setDisplayHomeAsUpEnabled(true)
Akshat Agarwal
3
getSupportActionBar (). setDisplayShowTitleEnabled (true); antes de setTitle ("123");
Jose Manuel Abarca Rodríguez
Si usa el código getActionBar (). SetIcon (R.drawable.my_icon); ¿Puedes hacer que se pueda hacer clic?
Skitty
1
@ JoseManuelAbarcaRodríguez Gracias, eso era lo que me faltaba. En Kotlin: supportActionBar?.setDisplayShowTitleEnabled(true)entonces supportActionBar?.title = "your title". Y tiene que hacerse en onResume, no en onCreate, al crear la actividad con startActivity.
Eric Aya
18

Para que todas tus barras de acción puedan usar un solo ícono, puedes hacerlo en tu Manifiesto de Android.

<application
    android:logo="@drawable/Image">

    ...

</application>
Akshat Agarwal
fuente
1
gracias- Quería un ícono diferente para fuera de la aplicación (como se ve en "Todas las aplicaciones") y otro ícono a la izquierda de la barra de acción. Y esto funcionó. El archivo de manifiesto todavía tiene android: icon = "@ drawable / ic_launcher"
flobacca
2
Esta es la forma correcta, ya que pre-loadsel icono, el icono de configuración programática es lento.
Muhammad Babar
11

Solo necesita agregar estas 3 líneas de código. Reemplace el icono con su propio icono. Si quieres generar íconos usa esto

getSupportActionBar().setHomeAsUpIndicator(R.drawable.icon_back_arrow);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
Sagar Devanga
fuente
11

En Android 5.0, las pautas de diseño de materiales desalientan el uso del icono en actionBar

para habilitarlo agregue el siguiente código

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);

el crédito va al autor de este artículo

Azzy
fuente
9

Si desea cambiar el título de la barra de acción, simplemente ingrese el siguiente código de 1 línea en onCreate () de su Actividad

getActionBar().setTitle("Test");
Jabbir Basha
fuente
¿Cómo puedo animar este cambio de título?
Srikar Reddy
7

Puede cambiar el ícono en su agregando el ícono que desee a sus respectivas carpetas dibujables, y luego cambiando esta línea en su archivo AndroidManifest.xml:

android:icon="@drawable/ic_launcher"

para que coincida con el nombre de su ícono. O coloque su icono como ic_launcher, si son el mismo icono. En cuanto a lo que dice, agregue o cambie las cadenas que coincidan con eso en su archivo res / values ​​/ strings.xml. Luego, una vez más en su archivo AndroidManifest.xml, cambie esta línea:

android:label="@string/app_name"

a cualquier cuerda que tengas en su. Tendrá que hacer esto para la aplicación en su conjunto y para las actividades que desee, pero las líneas son las mismas.

Espero que esto ayude.

RobStemen
fuente
¿Qué tamaño (dp) debe tener esta android:iconetiqueta de actividad?
cuddlecheek
6
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(getString(R.string.titolo));
actionBar.setIcon(R.mipmap.ic_launcher);
actionBar.setDisplayShowHomeEnabled(true);
Alessandro Caliaro
fuente
5

Para eso, puedes hacerlo de 2 maneras: XML o Java. Ver aquí: Cómo cambiar el texto en la barra de acción

Entonces:

XML:

<activity android:name=".Hello_World"
              android:label="This is the Hello World Application">
</activity>

Java:

public class TitleBar extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

       setContentView(R.layout.main);


       if ( customTitleSupported ) {
           getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
           }

       final TextView myTitleText = (TextView) findViewById(R.id.myTitle);
       if ( myTitleText != null ) {
           myTitleText.setText("NEW TITLE");

           // user can also set color using "Color" and then "Color value constant"
          // myTitleText.setBackgroundColor(Color.GREEN);
       }
 }
}
Milos
fuente
2
Para hacerlo desde el código, debe llamar setTitle(CharSequence text)o setTitle(int titleRes). No lo use a requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)menos que esté planeando reemplazar toda la barra de título con su propia Vista personalizada.
Karakuri
3

Para el título establecido :

getActionBar().setTitle("Title");

Para el conjunto de iconos :

getActionBar().setIcon(R.drawable.YOUR_ICON_NAME);
Bhaumik Sathvara
fuente
2

Usé la siguiente llamada adentro onNavigationItemSelected:

HomeActivity.this.setTitle(item.getTitle());
AmandaHLA
fuente
1

Agregue el siguiente código dentro de una función onCreate en su actividad.

setTitle("NewName");
Chandrahasa Rai
fuente
1

Este trabajo para mi:

getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeAsUpIndicator(R.mipmap.baseline_dehaze_white_24);
Ram Chhabra
fuente
0

El título de la barra de acción, por defecto, usará la etiqueta de la actividad actual, pero también puede establecerlo mediante programación a través de ActionBar.setTitle() .

Para implementar la funcionalidad del botón "Atrás" (más precisamente, "Arriba") del que está hablando, lea la sección "Uso del icono de la aplicación para la navegación" de guía del desarrollador barra de acción .

Finalmente, para cambiar el ícono, la guía también lo cubre. En resumen, la barra de acción mostrará la imagen suministrada android:iconen su manifiesto applicationo activityelemento, si hay uno. La práctica típica es crear un icono de aplicación (en todas las diversas densidades que necesitará) nombrado ic_launcher.pngy colocarlo en sus drawable-*directorios.

NubladoMúsica
fuente
0

Recibí un non-static method setTitle(CharSequence) cannot be referenced from a static contexterror porque lo usé setTitle()en la clase estática PlaceholderFragment. Lo resolví usandogetActivity().getActionBar().setTitle("new title");

usuario4757345
fuente
0

Vaya al manifiesto en la actividad específica que desea cambiar Barra de acción Nombre del título y escriba android: label = "Title name"

Abhishek Rajpurohit
fuente
0

Vaya al archivo AndroidManifest.xml . Encuentra la <application>etiqueta Allí puedes ver un atributo

android:label="@string/app_name"

Ahora ve a res> values> strings.xml

Cambiar el

<string name="app_name">MainActivity</string> 

a

<string name="app_name">Your Desired Name</string>

Ejemplo

AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubmitForm">

        </activity>
    </application>

strings.xml

<resources>
    <string name="app_name">Your Desired Name</string>
    <string name="action_settings">Settings</string>
</resources>
Kartik ganiga
fuente
0

También puede hacer lo siguiente:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        setSupportActionBar(toolbar)
        setTitle("Activity 2")
    }
Naresh Pawar
fuente