So ändern Sie den Text in der Aktionsleiste

230

Derzeit wird nur der Name der Anwendung angezeigt, und ich möchte, dass etwas Benutzerdefiniertes angezeigt wird und für jeden Bildschirm in meiner App anders ist.

Beispiel: Auf meinem Startbildschirm könnte in der Aktionsleiste "Seite1" angezeigt werden, während bei einer anderen Aktivität, zu der die App wechselt, "Seite2" in der Aktionsleiste des Bildschirms angezeigt werden könnte.

dootcher
quelle

Antworten:

358

Update: Neuestes ActionBar (Titel) Muster:

Zu Ihrer Information , ActionBar wurde in API Level 11 eingeführt. ActionBar ist eine Fensterfunktion am oberen Rand der Aktivität, die den Aktivitätstitel , die Navigationsmodi und andere interaktive Elemente wie die Suche anzeigen kann .

Ich erinnere mich genau daran, wie ich die Titelleiste angepasst und durch die Anwendung konsistent gemacht habe. So kann ich einen Vergleich mit den früheren Tagen anstellen und einige der Vorteile der Verwendung von ActionBar auflisten:

  1. Es bietet Ihren Benutzern eine vertraute Benutzeroberfläche für alle Anwendungen, die das System problemlos an verschiedene Bildschirmkonfigurationen anpasst.
  2. Entwickler müssen nicht viel Code schreiben, um den Aktivitätstitel, die Symbole und den Navigationsmodus anzuzeigen, da ActionBar bereits mit der Abstraktion der obersten Ebene ausgestattet ist.

Beispielsweise:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

=> Normaler Weg,

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

=> Aktionsleiste anpassen,

Beispielsweise:

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

}

Styling der Aktionsleiste:

Die ActionBar bietet Ihnen grundlegende und vertraute Looks, Navigationsmodi und andere schnelle Aktionen. Das heißt aber nicht, dass es in jeder App gleich aussieht. Sie können es gemäß Ihren Benutzeroberflächen- und Designanforderungen anpassen. Sie müssen nur Stile und Themen definieren und schreiben.

Lesen Sie mehr unter: Styling der Aktionsleiste

Und wenn Sie Stile für ActionBar erzeugen wollen , dann dieses Style - Generator kann Tool Ihnen helfen.

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

Alt: Frühere Tage:

=> Normaler Weg,

Sie können den Titel jedes Bildschirms (dh der Aktivität) ändern, indem Sie deren festlegen Android:label

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

=> Benutzerdefiniert - Titelleiste


Wenn Sie jedoch die Titelleiste auf Ihre eigene Weise anpassen möchten, dh Want to put Image icon and custom-text, funktioniert der folgende Code für mich:

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

string.xml

Die Datei strings.xml wird unter dem valuesOrdner definiert .

<?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
quelle
2
Folgen Sie diesem Beispiel, um den benutzerdefinierten Titel in Android für eine Aktivität oder global für die gesamte Anwendung festzulegen
Paresh Mayani
1
+1! danke dafür, aber kannst du sagen warum der android: layout_width = "400px" zum übergeordneten linearen layout?
Quinestor
2
@quinestor Ja, Sie können "wrap_content" oder "fill_parent" verwenden, wenn Sie möchten. Dies ist nur zum Beispiel.
Paresh Mayani
Einige Hinweise für Javascript?
Efeu
1
Ich würde es ablehnen, "px" anstelle von unabhängigen Einheiten wie "dp" zu verwenden, da viele neue Lernende viel mehr lernen als nur das, was beantwortet wurde, indem sie versuchten, den Code aufzuschlüsseln und das Beste daraus zu machen.
Akshat Agarwal
107

Sie können die Bezeichnung für jede Aktivität in Ihrer Manifestdatei definieren.

Eine normale Definition einer Aktivität sieht folgendermaßen aus:

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

Wobei Titeltext durch die ID einer Zeichenfolgenressource für diese Aktivität ersetzt werden soll.

Sie können den Titeltext auch aus dem Code festlegen, wenn Sie ihn dynamisch festlegen möchten.

setTitle(address.getCity());

Mit dieser Zeile wird der Titel in der Oncreate-Methode meiner Aktivität auf die Stadt einer bestimmten Adresse gesetzt.

Janusz
quelle
56

Sie können Ihren Titel programmgesteuert definieren, indem setTitleSie in Ihrer Datei Activityentweder eine Stringoder eine in Ihrer values/strings.xmlDatei definierte ID akzeptieren . Beispiel:

public class YourActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

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

    }
}
donturner
quelle
19

Wir können den ActionBar-Titel auf zwei Arten ändern:

  1. Im Manifest: Legen Sie in der Manifestdatei die Bezeichnung jeder Aktivität fest.

    android:label="@string/TitleWhichYouWantToDisplay"
  2. In Code: Rufen Sie im Code die setTitle () -Methode mit einem String oder der ID von String als Argument auf.

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

Innerhalb des Rückrufs von Activity.onCreate () oder an einer anderen Stelle, an der Sie den Titel ändern müssen:

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

versuche das zu tun ...

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

Für mich geht das

nonickh
quelle
3

Etwas älter, hatte aber das gleiche Problem. Ich habe es so gemacht:

string.xml

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

und stellen Sie sicher, dass Sie dies in Ihrer AndroidManifest.xml festlegen :

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

Es ist einfach und Sie müssen sich keine Gedanken über Null-Referenzen und andere Dinge machen.

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

Der einfachste Weg, den Namen der Aktionsleiste zu ändern, besteht darin, in der Datei AndroidManifest.xml diesen Code einzugeben.

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

Sie fügen diesen Code einfach in die onCreateMethode ein.

setTitle("new title");
NEC
quelle
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);

Weitere Informationen finden Sie unter folgendem Link:

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

Bhaumik Sathvara
quelle
Sie können getSupportActionBar () verwenden, wenn Sie AppCompatActivity
Hamid Vakilian
1

Der beste Weg, um den Namen der Aktionsleiste zu ändern, besteht darin, in der Datei AndroidManifest.xml diesen Code einzugeben.

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

Kotlin

Sie können dies programmgesteuert in Kotlin auf diese Weise tun. Sie ignorieren es einfach, wenn "supportActionBar" null ist :

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

Oder so. Es wird eine Ausnahme ausgelöst, wenn "supportActionBar" null ist.

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

Am einfachsten ist es, anzurufen, this.setTitle("...")wenn Sie an der Aktivität teilnehmen. Und wenn Sie sich in einem Fragment befinden, rufen Sie einfach an getActivity().setTitle("...").

Auf diese Weise können Sie den Titel jederzeit ändern, ohne ihn vorher aufrufen zu müssen setContentView(R.layout.activity_test).

Hatim
quelle
0

Für zukünftige Entwickler, die AndroidX und die Navigationsarchitekturkomponente verwenden .

Anstatt den Symbolleistentitel mit einer der oben genannten Lösungen festzulegen, was sehr schmerzhaft sein kann, wenn Sie ihn bei einem Backstack-Wechsel dynamisch festlegen möchten, können Sie einen Platzhalter für den Titel des Fragments im Navigationsdiagramm wie folgt festlegen :

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

Der Platzhalterwert muss mit FragmentDirections(über die Aktionsmethode) angegeben werden.

Es wird dann im Titel ersetzt und zeigt wie Hello World(wann placeholder = "World").

Fabian Damken
quelle
0

getSupportActionBar().setTitle("title");

Phani Varma
quelle
Nur-Code-Antworten sind Antworten von geringer Qualität. Fügen Sie eine Erklärung hinzu, warum dies funktioniert.
Taslim Oseni