Come posso modificare il titolo e l'icona della barra delle azioni Android


225

Sto cercando di fare alcune cose su ActionBar in Android.

Ho già aggiunto nuovi elementi nella parte destra della barra delle azioni.

Come posso cambiare il lato sinistro della barra delle azioni? Voglio cambiare l'icona e il testo e voglio aggiungere un "pulsante Indietro" nella barra delle azioni per le altre schermate

Barra delle azioni Android

Risposte:


514

Questo è molto semplice da realizzare

Se vuoi cambiarlo nel codice, chiama:

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

E imposta i valori su qualsiasi cosa tu voglia.

Oppure, nel file XML manifest Android:

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

Per abilitare il pulsante Indietro nella tua app utilizzare:

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

Il codice dovrebbe essere inserito nel tuo in onCreatemodo che il cambio di etichetta / icona sia trasparente per l'utente, ma in realtà può essere chiamato ovunque durante il ciclo di vita dell'attività.


23
Se si utilizza la libreria di supporto per aggiungere la barra delle azioni, utilizzare getSupportActionBarinvece di getActionBar.
Rick Pastoor,

3
getActionBar().setHomeButtonEnabled(true)utilizza l'API di livello 14 o superiore, se desideri solo la funzionalità del pulsante Indietro nelle API più vecchie e più recenti di cui hai bisognogetActionBar().setDisplayHomeAsUpEnabled(true)
Akshat Agarwal

3
getSupportActionBar (). setDisplayShowTitleEnabled (true); prima di setTitle ("123");
Jose Manuel Abarca Rodríguez,

Se si utilizza il codice getActionBar (). SetIcon (R.drawable.my_icon); puoi renderlo cliccabile?
Skitty,

1
@ JoseManuelAbarcaRodríguez Grazie, ecco cosa mi mancava. In Kotlin: supportActionBar?.setDisplayShowTitleEnabled(true)allora supportActionBar?.title = "your title". E deve essere fatto in onResume, non in onCreate, quando si crea l'attività con startActivity.
Eric Aya,

18

Per rendere una singola icona utilizzabile da tutte le barre delle azioni puoi farlo nel tuo Manifest Android.

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

    ...

</application>

1
grazie: volevo un'icona diversa per l'esterno dell'app (come si vede in "Tutte le app") e un'altra icona a sinistra della barra delle azioni. E questo ha funzionato. Il file manifest ha ancora android: icon = "@ drawable / ic_launcher"
flobacca

2
Questo è il modo giusto in quanto pre-loadsicona, l'icona delle impostazioni a livello di programmazione è lenta!
Muhammad Babar,

11

Devi solo aggiungere queste 3 righe di codice. Sostituisci l'icona con la tua icona. Se vuoi generare icone usa questo

getSupportActionBar().setHomeAsUpIndicator(R.drawable.icon_back_arrow);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);

11

Nelle linee guida di progettazione dei materiali di Android 5.0 scoraggia l'uso dell'icona in actionBar

per abilitarlo aggiungi il seguente codice

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

il merito va all'autore di questo articolo


9

Se vuoi cambiare il titolo della barra delle azioni, inserisci il seguente codice di 1 riga in onCreate () della tua attività

getActionBar().setTitle("Test");

Come posso animare questo cambio di titolo?
Srikar Reddy,

7

Puoi cambiare l'icona aggiungendo qualsiasi icona desideri alle tue rispettive cartelle disegnabili, quindi cambiando questa linea nel tuo file AndroidManifest.xml:

android:icon="@drawable/ic_launcher"

per abbinare qualunque sia il nome della tua icona. O metti la tua icona come ic_launcher, se sono la stessa icona. Per quanto riguarda ciò che dice, aggiungi o modifica le stringhe corrispondenti a quelle nel tuo file res / valori / strings.xml. Quindi, ancora una volta nel tuo file AndroidManifest.xml, modifica questa riga:

android:label="@string/app_name"

qualunque sia la stringa che hai nella loro. Dovrai farlo per l'applicazione nel suo insieme e per qualsiasi attività desideri, ma le linee sono le stesse.

Spero che questo ti aiuti.


Che dimensione (dp) dovrebbe essere android:iconnel tag attività?
cuddlecheek,

6
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(getString(R.string.titolo));
actionBar.setIcon(R.mipmap.ic_launcher);
actionBar.setDisplayShowHomeEnabled(true);

5

Per questo, puoi farlo in 2 modi: XML o Java. Vedi qui: Come modificare il testo sulla barra delle azioni

Così:

XML:

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

Giava:

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

2
Per farlo dal codice, dovresti chiamare setTitle(CharSequence text)o setTitle(int titleRes). Non utilizzare a requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)meno che non si preveda di sostituire l'intera barra del titolo con la propria vista personalizzata.
Karakuri,

3

Per il titolo impostato :

getActionBar().setTitle("Title");

Per impostare l'icona :

getActionBar().setIcon(R.drawable.YOUR_ICON_NAME);

2

Ho usato la seguente chiamata all'interno onNavigationItemSelected:

HomeActivity.this.setTitle(item.getTitle());

1

Aggiungi il codice seguente all'interno di una funzione onCreate nella tua attività.

setTitle("NewName");

1

Questo lavoro per me:

getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeAsUpIndicator(R.mipmap.baseline_dehaze_white_24);

0

Il titolo della barra delle azioni utilizzerà, per impostazione predefinita, l'etichetta dell'attività corrente, ma è anche possibile impostarla a livello di codice tramite ActionBar.setTitle() .

Per implementare la funzionalità del pulsante "Indietro" (più precisamente, "Su") di cui stai parlando, leggi la sezione "Utilizzo dell'icona dell'app per la navigazione" della Guida per gli sviluppatori della barra delle azioni .

Infine, per cambiare l'icona, la guida copre anche questo. In breve, la barra delle azioni mostrerà l'immagine fornita android:iconnel tuo manifest applicationo activityelemento, se ce n'è uno. La pratica tipica è quella di creare un'icona dell'applicazione (in tutte le varie densità di cui hai bisogno) denominata ic_launcher.pnge posizionarla nelle tue drawable-*directory.


0

Ho ricevuto un non-static method setTitle(CharSequence) cannot be referenced from a static contexterrore perché ho usato setTitle()nella classe PlaceholderFragment statica. L'ho risolto usandogetActivity().getActionBar().setTitle("new title");


0

Vai a manifest in quale specifica attività desideri cambiare Barra delle azioni Nome del titolo e scrivi android: label = "Nome del titolo"


0

Vai al file AndroidManifest.xml . Trova il <application>tag Lì puoi vedere un attributo

android:label="@string/app_name"

Ora vai a res> valori> strings.xml

Cambiare il

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

per

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

Esempio

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>

0

Puoi anche fare come segue:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        setSupportActionBar(toolbar)
        setTitle("Activity 2")
    }
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.