Comment changer le titre de l'activité dans Android?

227

j'utilise

Window w = getWindow();
w.setTitle("My title");

pour changer le titre de mon activité actuelle mais cela ne semble pas fonctionner.

Quelqu'un peut-il me guider sur la façon de changer cela?

UMAR
la source

Réponses:

498

Essayez setTitle seul, comme ceci:

setTitle("Hello StackOverflow");
jeffh
la source
1
setTitle ne fonctionne pas pour moi, getSupportActionBar () et getActionBar () ont également la valeur null je ne peux pas définir le titre lors de l'exécution.
Codage Ninja du
1
@Ninja_Coding, essayez de l'appeler à partir de l'activité.
John Perry
241

Juste un FYI, vous pouvez éventuellement le faire à partir du XML.

Dans AndroidManifest.xml, vous pouvez le définir avec

android:label="My Activity Title"

Ou

android:label="@string/my_activity_label"

Exemple:

    <activity
        android:name=".Splash"
        android:label="@string/splash_activity_title" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
BullShark
la source
28
Pourquoi voudriez-vous voter contre? Il est bon de savoir que vous pouvez également le faire à partir du XML.
BullShark
8
C'est à peu près la bonne façon de le faire, avec des références à des chaînes externes pour permettre une localisation facile. Devrait être accepté la réponse.
Savourer
10
Ce n'est pas la même chose que setTitle (). La définition de la propriété android: label de l'activité du lanceur modifie également le nom de l'application sur l'écran des applications du téléphone. L'icône de votre application aura la légende "Mon titre d'activité".
Doron Zehavi
2
@doran Bien que vous ayez raison et que son exemple soit faux en quelque sorte, il a également raison. Son problème consiste à ajouter une étiquette à un écran de démarrage, et vous ne feriez pas cela pour un écran de démarrage, mais simplement à l'étiqueter avec le nom de l'application. Cependant, le libellé de l'ensemble de l'application est ce qui détermine le titre donné au lanceur s'il est défini
Pazuzu156
1
Ce devrait être la meilleure réponse.
MaXi32
24

Si vous le voulez une fois et laissez le système gérer le reste (pas dynamique), faites comme ceci dans votre fichier manifeste:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name_full" > //This is my custom title name on activity. <- The question is about this one.
            <intent-filter android:label="@string/app_launcher_name" > //This is my custom Icon title name (launcher name that you see in android apps/homescreen)
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
hB0
la source
14
setTitle(getResources().getText(R.string.MyTitle));
Gennady Kozlov
la source
@Sujay oui, vous pouvez, vous êtes ici: essayez {int labelRes = getPackageManager (). GetActivityInfo (getComponentName (), 0) .labelRes; Logger.d (this.getClass (). GetSimpleName (), "labelRes:" + labelRes); if (labelRes> 0 && getSupportActionBar ()! = null) {getSupportActionBar (). setTitle (labelRes); }} catch (exception PackageManager.NameNotFoundException) {Logger.d (this.getClass (). getSimpleName (), "exception interceptée:" + Log.getStackTraceString (exception)); }
user1510006
9

Cela a fonctionné pour moi.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment, container, false);
    getActivity().setTitle("My Title");
//...
}
moberme
la source
7

Il y a un moyen plus rapide, utilisez simplement

YourActivity.setTitle("New Title");

Vous pouvez également le trouver dans onCreate () avec ceci, par exemple:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("My Title");
    }

Soit dit en passant, ce que vous ne pouvez tout simplement pas faire, c'est appeler setTitle () de manière statique sans passer par aucun objet Activity.

Defrag
la source
cela ne fonctionne pas lorsque vous appuyez sur le bouton de veille et réactivez l'écran. Le titre n'est pas mis à jour. Des idées?
Jim Clermonts
C'est parce que onCreate () ne sera pas appelé dans votre exemple. Vous devriez envisager d'utiliser un autre gestionnaire d'événements à la place, tel que onResume (). Je vous suggère de voir ce lien: developer.android.com/guide/components/activities/…
Defrag
4

Si vous avez plusieurs activités, vous pouvez le définir comme ceci dans AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    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=".NumbersActivity"
        android:label="@string/category_numbers"
        android:theme="@style/category_numbers" />
    <activity
        android:name=".FamilyActivity"
        android:label="@string/category_family"
        android:theme="@style/category_family" />
    <activity
        android:name=".ColorsActivity"
        android:label="@string/category_colors"
        android:theme="@style/category_colors" />
    <activity
        android:name=".PhrasesActivity"
        android:label="@string/category_phrases"
        android:theme="@style/category_phrases" />
    <activity
        android:name=".ExperimentActivity"
        android:label="@string/category_experiment"
        android:theme="@style/category_experiment" />
</application>
SGX
la source
j'ai fait exactement ça, ça n'a pas marché. sur chaque activité que je vois juste le nom de l'application. Impossible de le changer. est maintenant plus d'une demi-heure :(
krupesh Anadkat
2

J'utilise Android Studio 3.0.1.

Avec une activité:

setTitle("Title Text");

À l'intérieur d'un fragment:

getActivity().setTitle("Title Text");
adrian
la source
2
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.Main_Activity);
    this.setTitle("Title name");
}
Govind Maheshwari
la source
1

Si vous souhaitez définir le titre dans un fichier Java, écrivez votre activité surCréer

setTitle("Your Title");

si vous voulez dans Manifest puis écrivez

    <activity
        android:name=".MainActivity"
        android:label="Your Title" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
Gundu Bandagar
la source
1

J'ai une barre d'outils dans mon activité et une activité de base qui remplace tous les titres. J'ai donc dû utiliser setTitle dans onResume () dans l'activité comme ceci:

@Override
  protected void onResume() {
    super.onResume();
    toolbar.setTitle(R.string.title);
  }
Hissatsu
la source
1

Le code m'a aidé à changer le titre.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_name);
    ActivityName.this.setTitle("Your Activity Title");}
Rohan Gupta
la source
0

Si vous souhaitez modifier le titre de l'activité lorsque vous changez d'activité en cliquant sur le bouton. Déclarez les variables nécessaires dans MainActivity:

    private static final String TITLE_SIGN = "title_sign";
    ImageButton mAriesButton;

Ajoutez onClickListener dans onCreate () et faites une nouvelle intention pour une autre activité:

    mTitleButton = (ImageButton) findViewById(R.id.title_button);
    mTitleButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, 
        SignActivity.class);
        String title_act = getText(R.string.simple_text).toString();
        intent.putExtra("title_act", title_act);
        startActivity(intent);
        finish();
        }
    });

Code SecondActivity dans onCreate ():

    String txtTitle = getIntent().getStringExtra("title_act");
    this.setTitle(txtTitle);
Egor Voevodin
la source
-1

Si vous utilisez onCreateOptionsMenu , vous pouvez également ajouter du code setTitle dans onCreateOptionsMenu.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    setTitle("Neue Aktivität");
    return true;
}
Umut D.
la source