web-dev-qa-db-de.com

Wie lege ich ein anderes Label für den Launcher als den Aktivitätstitel fest?

Diese Frage wurde bereits gestellt - aber ohne befriedigende Antwort! Also versuche ich es nochmal.

Ich möchte meinem Anwendungsstartsymbol (das auf dem Startbildschirm angezeigt wird!) Eine andere, kürzere Beschriftung geben. Es scheint, dass der Launcher sein Label aus dem Hauptabschnitt über das Label der Hauptaktivität bezieht, wie hier:

<activity Android:name="MainActivity" Android:label="@string/app_short_name">
<intent-filter>
    <action Android:name="Android.intent.action.MAIN" />
    <category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>

Ich habe den ursprünglichen Verweis auf den Namen meiner App @ string/app_name hier bereits in eine andere, kürzere String-Ressource geändert.

ABER - groß ABER : dies ändert natürlich auch den Standardtitel dieser Aktivität! Und ich wollte nicht, dass das passiert, es gibt genug Platz für einen langen Anwendungsnamen! Das erneute Setzen des langen Titels in onCreate mit der Methode setTitle(int) ist ebenfalls nicht sinnvoll, da der Kurzname für kurze Zeit für den Benutzer sichtbar ist, aber lange genug, um es zu bemerken!

Und - bitte beantworte meine Frage nicht mit einem Verweis auf eine benutzerdefinierte Titelleiste ... Ich möchte nicht so weit gehen, nur wegen eines blöden Stringtitels! Es ist mühsam, eine benutzerdefinierte Titelleiste zu zeichnen, um so wenig Wirkung zu erzielen!

Gibt es kein einfacher Weg nur um dem Launcher eine andere Zeichenfolge zur Anzeige zu geben? Danke für deine Antworten!

Edit: Ein weiterer Grund, warum eine benutzerdefinierte Titelleiste so schmerzhaft ist, ist, dass sie nicht wie die Standard-Titelleiste aussieht. Ich müsste explizit Dinge tun, damit sie auf jedem Gerät gleich aussieht! Und das kann keine Lösung sein, wenn ich doch kein anderes Aussehen haben will!

264
Zordid

Anscheinend <intent-filter> kann ein label-Attribut haben. Wenn es nicht vorhanden ist, wird die Bezeichnung von der übergeordneten Komponente (entweder Aktivität oder Anwendung) übernommen. Auf diese Weise können Sie eine Bezeichnung für das Startsymbol festlegen, während die Aktivität weiterhin mit einem eigenen Titel versehen ist.

Beachten Sie, dass dies bei Emulatoren möglicherweise nicht auf realen Geräten funktioniert, da es von der verwendeten Launcher-Implementierung abhängt.

http://developer.Android.com/guide/topics/manifest/intent-filter-element.html

<activity
  Android:name=".ui.HomeActivity"
  Android:label="@string/title_home_activity"
  Android:icon="@drawable/icon">
  <intent-filter Android:label="@string/app_name">
    <action Android:name="Android.intent.action.MAIN" />
    <category Android:name="Android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Anmerkung: <intent-filter> kann auch ein icon-Attribut haben, aber aus unerklärlichen Gründen überschreibt es not das in der Aktivität angegebene Symbol. Dies kann für Sie wichtig sein, wenn Sie planen, die native ActionBar in SDK 11+ zu verwenden, das die in der Aktivität angegebenen Symbole und Logos verwendet.

Hinzugefügtes Info: Die Bezeichnung wird von Activity und nicht von der Anwendung geerbt.

 <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"       
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >

        <activity
            Android:name=".StartActivity"
            Android:label="@string/app_long_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

In diesem Fall wird app_long_name mit dem Launcher-Symbol angezeigt, wenn die Beschriftung nicht wie oben angegeben eingefügt wird.

466
Mark Renouf

Ich habe das Gleiche gesucht und hier ist, was für mich funktioniert hat.

<activity Android:name="MainActivity" Android:label="@string/app_short_name">
<intent-filter>
    <action Android:name="Android.intent.action.MAIN" />
    <category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>

Dadurch erhält Ihr Anwendungsstartsymbol einen Kurznamen.

Um der Anwendungsleiste einen größeren Namen hinzuzufügen, müssen Sie nur Folgendes hinzufügen:

this.setTitle(getResources().getString(R.string.app_name));

zu Ihrer Hauptaktivität Java file.

35
Anila

Die Lösung von Mark Renouf schlägt bei mir fehl (mit Nexus 4 und Android= 4.4). Bei Verwendung von Verknüpfungen schlägt dies fehl. Verknüpfungen verwenden die Hauptaktivitätsbezeichnung anstelle des App-Namens. Ich habe einige Apps wie GMail und Google Keep funktioniert einwandfrei, aber wenn Sie sie öffnen, wird ein Moment zwischen dem leeren Titel und dem Titel angezeigt (der besser zu sein scheint als der blinkende Name der App, bevor der Titel mit setTitle () festgelegt wird).

Also hier ist die beste Lösung, die ich gefunden habe:

Erstellen Sie einen Stil, in dem die Aktionsleiste den Titel/die Bezeichnung nicht anzeigt:

<style name="NoActionBarTitle" parent="Android:Theme.Holo.Light.DarkActionBar">
    <item name="Android:actionBarStyle">@style/NoActionBarTitle.ActionBar</item>
</style>

<style name="NoActionBarTitle.ActionBar" parent="@Android:style/Widget.Holo.ActionBar">
    <item name="Android:displayOptions">showHome|useLogo</item>
</style>

Ich verwende eine Navigationsschublade und ein Logo (weil ich ein Logo und ein Symbol für meine App verwende). Du kannst alles benutzen, aber benutze nicht showTitle. Legen Sie dann in der AndroidManifest.xml das Thema für die MainActivity fest:

<activity
    Android:name="com.xx.xxx.MainActivity"
    Android:logo="@drawable/ic_icon_padding"
    Android:theme="@style/NoActionBarTitle">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Legen Sie dann in der onCreate () -Methode von MainActivity den Titel Ihrer Aktionsleiste fest:

getActionBar().setTitle(R.string.your_title);

Danach können Sie anrufen:

getActionBar().setDisplayShowTitleEnabled(true);

Tricky aber wert.

10
Ferran Negre

Dies wird wahrscheinlich nicht Ihren Vorstellungen entsprechen, aber Sie haben darüber nachgedacht, einen Begrüßungsbildschirm zu erstellen, der sehr kurz angezeigt wird (mit dem Standardtitel) und dann Ihre neue tatsächliche "Haupt" -Aktivität mit dem Titel Ihrer Wahl über setTitle(int) Methode? Ich habe dies nicht versucht, um zu sehen, ob es funktioniert, aber das könnte eine angenehme Arbeit schaffen, die nicht die weniger als nahtlose Natur dessen zeigt, was Sie erreichen wollen.

4
Adriaan

Für alle, die die Support/Appcompat Toolbar über die setSupportActionBar() -Methode verwenden, kann der Aktivitätstitel in der Toolbar-XML festgelegt werden:

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    app:title="@string/activity_title"
    ...
/>

Dadurch werden die im Manifest festgelegten Anwendungs- und Aktivitätsbezeichnungen überschrieben.

Android.support.v7.widget.Toolbar

2
Maksim Ivanov

Ich habe eine Lösung für dieses Problem gefunden

In manifest.xml

Schreibe dein App-Name in den Android:label Der Launcher- (Haupt-) Aktivität.

Dadurch wird die Bezeichnung Ihrer Hauptaktivität mit der Bezeichnung der App identisch.

Dann schreiben Sie in der Funktion onCreate() Ihrer Launcher- (Haupt-) Aktivität diese Anweisung

if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("main activity label");
        }

Schreiben Sie hier das Etikett, das Sie Ihrer Launcher- (Haupt-) Aktivität geben möchten.

1
Tanuj Yadav

Der Launcher zeigt tatsächlich Android: Label und Android: Symbol für Aktivität (en), die deklariert werden

<intent-filter>
    <action Android:name="Android.intent.action.MAIN" />
    <category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>

daher ist das Anwendungsetikett nicht von Nutzen.

0
Rahul

Sie können so etwas tun:

public class FooBar extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // change title
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
    }
}

Sie müssen ein benutzerdefiniertes Layout erstellen, um den Titel zu speichern. Es könnte so einfach sein wie (genannt my_title.xml in diesem Fall):

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:layout_width="wrap_content"
  Android:layout_height="wrap_content"
  Android:text="foo bar"/>

In deinem AndroidManifest.xml-Datei müssen Sie nur den Titel für die App festlegen. Dies wird im Starter-Symbol angezeigt. Für Ihre Aktivität müssen Sie dort keinen Titel festlegen.

0
Cristian