Cómo cambiar el texto en la barra de acción

230

Actualmente solo muestra el nombre de la aplicación y quiero que muestre algo personalizado y sea diferente para cada pantalla de mi aplicación.

Por ejemplo: mi pantalla de inicio podría decir 'página1' en la barra de acción, mientras que otra actividad a la que la aplicación cambia podría tener 'página2' en la barra de acción de esa pantalla.

dootcher
fuente

Respuestas:

358

Actualización: Último patrón de ActionBar (Título):

Para su información, ActionBar se introdujo en el API Nivel 11. ActionBar es una función de ventana en la parte superior de la Actividad que puede mostrar el título de la actividad , los modos de navegación y otros elementos interactivos como la búsqueda.

Recuerdo exactamente cómo personalizar la barra de título y hacerla consistente a través de la aplicación. Entonces puedo hacer una comparación con los días anteriores y puedo enumerar algunas de las ventajas de usar ActionBar:

  1. Ofrece a sus usuarios una interfaz familiar en todas las aplicaciones que el sistema adapta con gracia para diferentes configuraciones de pantalla.
  2. Los desarrolladores no necesitan escribir mucho código para mostrar el Título de actividad, los iconos y los modos de navegación porque ActionBar ya está listo con abstracción de nivel superior.

Por ejemplo:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

=> Forma normal,

getActionBar().setTitle("Hello world App");   
getSupportActionBar().setTitle("Hello world App");  // provide compatibility to all the versions

=> Personalizar barra de acciones,

Por ejemplo:

@Override
public void setActionBar(String heading) {
    // TODO Auto-generated method stub

    com.actionbarsherlock.app.ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.title_bar_gray)));
    actionBar.setTitle(heading);
    actionBar.show();

}

Estilo de la barra de acción:

ActionBar le proporciona un aspecto básico y familiar, modos de navegación y otras acciones rápidas para realizar. Pero eso no significa que se vea igual en todas las aplicaciones. Puede personalizarlo según su interfaz de usuario y los requisitos de diseño. Solo tiene que definir y escribir estilos y temas.

Lea más en: Estilizar la barra de acción

Y si desea generar estilos para ActionBar, esta herramienta Style Generator puede ayudarlo.

================================================== ===============================

Viejo: días anteriores:

=> Forma normal,

puede cambiar el título de cada pantalla (es decir, actividad) configurando su Android:label

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

=> Personalizado - Título - barra


Pero si desea personalizar la barra de título a su manera, es decir Want to put Image icon and custom-text, el siguiente código funciona para mí:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

titlebar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="400dp" 
  android:layout_height="fill_parent"
  android:orientation="horizontal">

<ImageView android:id="@+id/ImageView01" 
            android:layout_width="57dp" 
            android:layout_height="wrap_content"
            android:background="@drawable/icon1"/>

<TextView 

  android:id="@+id/myTitle" 
  android:text="This is my new title" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:textColor="@color/titletextcolor"
   />
</LinearLayout>

TitleBar.java

public class TitleBar extends Activity {

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

strings.xml

El archivo strings.xml se define en la valuescarpeta.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, Set_Text_TitleBar!</string>
    <string name="app_name">Set_Text_TitleBar</string>
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>
Paresh Mayani
fuente
2
Siga este ejemplo para configurar el Título personalizado en Android para una actividad o globalmente para toda la aplicación: labs.makemachine.net/2010/03/custom-android-window-title
Paresh Mayani
1
+1! gracias por esto, pero ¿podría decir por qué el androide: layout_width = "400px", al diseño lineal principal?
quinestor
2
@quinestor sí, puede usar "wrap_content" o "fill_parent" si lo desea, esto es solo por ejemplo.
Paresh Mayani
¿Algunas sugerencias para javascript?
hiedra
1
Me opondría al uso de "px" en lugar de unidades independientes como "dp" porque muchos estudiantes nuevos aprenden mucho más de lo que se respondió al tratar de descifrar el código y aprovecharlo al máximo.
Akshat Agarwal
107

Puede definir la etiqueta para cada actividad en su archivo de manifiesto.

La definición normal de una actividad se ve así:

<activity
     android:name=".ui.myactivity"
     android:label="@string/Title Text" />

Donde el texto del título debe reemplazarse por la identificación de un recurso de cadena para esta actividad.

También puede establecer el texto del título a partir del código si desea establecerlo dinámicamente.

setTitle(address.getCity());

con esta línea, el título se establece en la ciudad de una dirección específica en el método de creación de mi actividad.

Janusz
fuente
56

Puede definir su título mediante programación utilizando setTitlesu Activity, este método puede aceptar una Stringo una ID definida en su values/strings.xmlarchivo. Ejemplo:

public class YourActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        setTitle(R.string.your_title);
        setContentView(R.layout.main);

    }
}
donturner
fuente
19

Podemos cambiar el título de ActionBar de una de dos maneras:

  1. En el manifiesto: en el archivo de manifiesto, establezca la etiqueta de cada actividad.

    android:label="@string/TitleWhichYouWantToDisplay"
  2. En código: en código, llame al método setTitle () con un String o el id de String como argumento.

    public class MainActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            setTitle(R.string.TitleWhichYouWantToDisplay);
            // OR You can also use the line below
            // setTitle("MyTitle")
            setContentView(R.layout.activity_main);
    
        }
    }
Radheshyam Singh
fuente
16

Dentro de Activity.onCreate () callback o en el otro lugar donde necesita cambiar el título:

getSupportActionBar().setTitle("Whatever title");
Andrey
fuente
5

intenta hacer esto ...

public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
    this.setTitle(String.format(your_format_string, your_personal_text_to_display));
    setContentView(R.layout.your_layout);
       ...
       ...
}

esto funciona para mi

nonickh
fuente
3

Un poco mayor pero tenía el mismo problema. Lo hice así:

strings.xml

<string name="title_awesome_app">My Awesome App</string>

y asegúrese de configurar esto en su AndroidManifest.xml :

<activity
            ...
            android:label="@string/title_awesome_app" >
            ...
</activity>

es fácil y no tiene que preocuparse por referencias nulas y otras cosas.

Javatar
fuente
3
getActionBar().setTitle("edit your text"); 
Habibur Rahman Ovie
fuente
3

La forma más fácil de cambiar el nombre de la barra de acción es ir a AndroidManifest.xml y escribir este código.

<activity android:name=".MainActivity"
    android:label="Your Label> </activity>
Mallikarjun Dodmani
fuente
2

Simplemente agrega este código en el onCreatemétodo.

setTitle("new title");
Comité ejecutivo nacional
fuente
1
ActionBar ab = getActionBar();
TextView tv = new TextView(getApplicationContext());

LayoutParams lp = new RelativeLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, // Width of TextView
        LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
tv.setTextColor(Color.RED);
ab.setCustomView(tv);

Para más información consulte este enlace:

http://android--code.blogspot.in/2015/09/android-how-to-change-actionbar-title_21.html

Bhaumik Sathvara
fuente
Puede usar getSupportActionBar () si está usando AppCompatActivity
Hamid Vakilian
1

La mejor manera de cambiar el nombre de la barra de acción es ir a AndroidManifest.xml y escribir este código.

<activity android:name=".YourActivity"
        android:label="NameYouWantToDisplay> </activity>
Parichay21
fuente
1

Kotlin

Puede hacerlo programáticamente en Kotlin de esta manera. Simplemente lo ignora si "supportActionBar" es nulo :

    supportActionBar?.setTitle(R.string.my_text)
    supportActionBar?.title = "My text"

O de esta manera. Lanza una excepción si "supportActionBar" es nulo.

    supportActionBar!!.setTitle(R.string.my_text)
    supportActionBar!!.title = "My text"
Mateus Melo
fuente
0

La forma más fácil es llamar this.setTitle("...")si está en la actividad. Y si estás en un fragmento, solo llama getActivity().setTitle("...");

De esta forma, podrá cambiar el título en cualquier momento, sin necesidad de llamarlo antes setContentView(R.layout.activity_test);

Hatim
fuente
0

Para futuros desarrolladores que usan AndroidX y el componente arquitectónico de navegación .

En lugar de establecer el título de la barra de herramientas con una de las soluciones anteriores, que puede ser muy doloroso si desea establecerlo dinámicamente en un cambio de pila posterior, puede establecer un marcador de posición para el título del fragmento en el gráfico de navegación de la siguiente manera:

<fragment
    android:id="@+id/some_fragment"
    android:name="package.SomeFragment"
    android:label="Hello {placeholder}"
    tools:layout="@layout/fragment_some">
    <argument
        android:name="placeholder"
        app:argType="string" />
</fragment>

El valor del marcador de posición debe proporcionarse utilizando FragmentDirections(mediante el método de acción).

Luego se reemplaza en el título y se muestra como Hello World(cuando placeholder = "World").

Fabian Damken
fuente
0

getSupportActionBar().setTitle("title");

Phani Varma
fuente
Las respuestas de solo código son respuestas de baja calidad. Agregue alguna explicación de por qué esto funciona.
Taslim Oseni