Come modificare il testo sulla barra delle azioni


230

Attualmente visualizza solo il nome dell'applicazione e voglio che visualizzi qualcosa di personalizzato ed essere diverso per ogni schermata della mia app.

Ad esempio: la mia schermata principale potrebbe pronunciare 'page1' nella barra delle azioni mentre un'altra attività a cui l'app passa potrebbe contenere 'page2' in quella barra delle azioni.

Risposte:


358

Aggiornamento: modello ActionBar (titolo) più recente:

Cordiali saluti, ActionBar è stato introdotto nel Livello API 11. ActionBar è una funzione della finestra nella parte superiore dell'Attività che può visualizzare il titolo dell'attività , le modalità di navigazione e altri elementi interattivi come la ricerca.

Ricordo esattamente la personalizzazione della barra del titolo e la sua coerenza attraverso l'applicazione. Quindi posso fare un confronto con i giorni precedenti e posso elencare alcuni dei vantaggi dell'utilizzo di ActionBar:

  1. Offre ai tuoi utenti un'interfaccia familiare tra le applicazioni che il sistema adatta con grazia alle diverse configurazioni dello schermo.
  2. Gli sviluppatori non devono scrivere molto codice per visualizzare il titolo dell'attività, le icone e le modalità di navigazione perché ActionBar è già pronto con l'astrazione di massimo livello.

Per esempio:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

=> Modo normale,

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

=> Personalizzazione della barra delle azioni,

Per esempio:

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

}

Stile della barra delle azioni:

ActionBar offre aspetti di base e familiari, modalità di navigazione e altre azioni rapide da eseguire. Ma ciò non significa che abbia lo stesso aspetto in ogni app. È possibile personalizzarlo in base all'interfaccia utente e ai requisiti di progettazione. Devi solo definire e scrivere stili e temi.

Maggiori informazioni su: Styling the Action Bar

E se vuoi generare stili per ActionBar, questo strumento Generatore di stili può aiutarti.

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

Vecchio: giorni precedenti:

=> Modo normale,

puoi cambiare il titolo di ogni schermata (ad es. attività) impostandone la Android:label

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

=> Personalizzato - Titolo - barra


Ma se vuoi personalizzare la barra del titolo a modo tuo, cioè Want to put Image icon and custom-textil seguente codice funziona per me:

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

Il file strings.xml è definito nella valuescartella.

<?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>

2
Segui questo esempio per impostare il titolo personalizzato in Android per un'attività o globalmente per l'intera applicazione: labs.makemachine.net/2010/03/custom-android-window-title
Paresh Mayani

1
+1! grazie per questo, ma potresti dire perché Android: layout_width = "400px", al layout lineare principale?
quinestor il

2
@quinestor sì, puoi usare "wrap_content" o "fill_parent" se vuoi, questo è solo per esempio.
Paresh Mayani,

Alcuni suggerimenti per javascript?
edera,

1
Andrei contro l'uso di "px" invece di unità indipendenti come "dp" perché molti nuovi studenti imparano molto di più di quello a cui è stata data risposta cercando di scomporre il codice e ottenere il massimo da esso.
Akshat Agarwal,

107

Puoi definire l'etichetta per ogni attività nel tuo file manifest.

Una definizione normale di un'attività è simile alla seguente:

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

Dove il testo del titolo deve essere sostituito dall'id di una risorsa stringa per questa attività.

È inoltre possibile impostare il testo del titolo dal codice se si desidera impostarlo in modo dinamico.

setTitle(address.getCity());

con questa riga il titolo è impostato sulla città di un indirizzo specifico nel metodo oncreate della mia attività.


56

Puoi definire il tuo titolo in modo programmatico usando setTitlenel tuo Activity, questo metodo può accettare uno Stringo un ID definito nel tuo values/strings.xmlfile. Esempio:

public class YourActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

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

    }
}

19

È possibile modificare il titolo di ActionBar in due modi:

  1. Nel Manifest: nel file manifest, imposta l'etichetta di ciascuna Attività.

    android:label="@string/TitleWhichYouWantToDisplay"
  2. Nel codice: nel codice, chiama il metodo setTitle () con una stringa o l'id di stringa come argomento.

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

16

All'interno del callback di Activity.onCreate () o in un altro punto in cui è necessario modificare il titolo:

getSupportActionBar().setTitle("Whatever title");

5

prova a fare questo ...

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

per me funziona


3

Un po 'più vecchio ma ha avuto lo stesso problema. L'ho fatto così:

strings.xml

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

e assicurati di impostarlo nel tuo AndroidManifest.xml :

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

è facile e non devi preoccuparti di riferimenti null e altre cose.



3

Il modo più semplice per modificare il nome della barra delle azioni è andare su AndroidManifest.xml e digitare questo codice.

<activity android:name=".MainActivity"
    android:label="Your Label> </activity>

2

Devi solo aggiungere questo codice nel onCreatemetodo.

setTitle("new title");

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

Per maggiori informazioni controlla questo link:

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


È possibile utilizzare getSupportActionBar () se si utilizza AppCompatActivity
Hamid Vakilian

1

Il modo migliore per cambiare il nome della barra delle azioni è andare su AndroidManifest.xml e digitare questo codice.

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

1

Kotlin

Puoi farlo programmaticamente in Kotlin in questo modo. Basta ignorarlo se "supportActionBar" è null :

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

O in questo modo. Genera un'eccezione se "supportActionBar" è null.

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

0

Il modo più semplice è chiamare this.setTitle("...")se sei nell'attività. E se sei in un frammento, chiama e basta getActivity().setTitle("...");

In questo modo ti permetterà di cambiare il titolo in qualsiasi momento, non è necessario chiamarlo prima setContentView(R.layout.activity_test);


0

Per i futuri sviluppatori che utilizzano AndroidX e il componente architettonico di navigazione .

Invece di impostare il titolo della barra degli strumenti utilizzando una delle soluzioni sopra, che può essere molto doloroso se si desidera impostarlo in modo dinamico su una modifica dello stack posteriore, è possibile impostare un segnaposto per il titolo del frammento nel grafico di navigazione come il seguente:

<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>

Il valore del segnaposto deve essere fornito utilizzando il FragmentDirections(tramite il metodo action).

Viene quindi sostituito nel titolo e mostra come Hello World(quando placeholder = "World").


0

getSupportActionBar().setTitle("title");


Le risposte di solo codice sono risposte di bassa qualità. Aggiungi una spiegazione al perché funziona.
Taslim Oseni,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.