265 votes

Étiquette du lanceur Android et titre de l'activité

Cette question a déjà été posée - mais sans aucune réponse satisfaisante ! Je la pose donc à nouveau.

Je veux donner à l'icône de mon lanceur d'applications (celui qui est affiché sur l'écran de démarrage !) une légende différente et plus courte. Il semble que le lanceur emprunte son libellé à la section mainfest sur le libellé de l'activité principale, comme ici :

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

J'ai déjà changé la référence originale au nom de mon application @string/app_name en une ressource différente, une chaîne plus courte, ici.

MAIS - grand MAIS Cela change aussi bien sûr le titre par défaut de cette activité ! Et je ne voulais pas que cela se produise, il y a assez d'espace pour un long nom d'application ! En remettant le titre long dans onCreate en utilisant le setTitle(int) ne sert à rien non plus, car le nom court sera visible par l'utilisateur pendant un court laps de temps, mais suffisamment pour qu'il le remarque !

Et - s'il vous plaît, ne répondez pas à ma question en vous référant à une barre de titre personnalisée... Je ne veux pas faire ce long chemin, juste à cause d'une stupide chaîne de titre ! C'est pénible de dessiner une barre de titre personnalisée pour si peu d'effet !

Est-ce qu'il y a pas de moyen facile pour simplement donner au lanceur une chaîne différente à afficher ? Merci pour vos réponses !

Editar: Une raison supplémentaire pour laquelle avoir une barre de titre personnalisée est un problème est qu'elle ne ressemblera pas à la barre de titre par défaut, je devrais explicitement faire des choses pour qu'elle soit identique sur chaque appareil ! Et cela ne peut pas être une solution si, après tout, je ne veux pas d'une apparence différente !

468voto

Mark Renouf Points 13128

Solution trouvée !

Apparemment, <intent-filter> peut avoir un attribut label. S'il est absent, l'étiquette est héritée du composant parent (soit Activité ou Application). Ainsi, en utilisant ceci, vous pouvez définir une étiquette pour l'icône du lanceur, tout en ayant l'activité avec son propre titre.

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>

Remarque : <intent-filter> peut également avoir un attribut d'icône, mais inexplicablement, il le fait pas remplacer l'icône spécifiée dans l'élément Activité. Cela peut être important pour vous si vous prévoyez d'utiliser l'icône native de l'activité ActionBar dans le SDK 11+, qui utilise l'icône et le logo spécifiés dans l'activité. activité.

35voto

Anila Points 524

Je cherchais la même chose et voici ce qui a marché pour moi.

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

Cela donnera un nom court à l'icône du lanceur d'applications. Pour ajouter un nom plus grand à la barre d'application, il suffit d'ajouter

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

dans l'écran principal de votre activité.

10voto

Ferran Negre Points 206

La solution de Mark Renouf ne fonctionne pas pour moi (j'utilise Nexus 4 et Android 4.4). Elle échoue lors de l'utilisation de raccourcis, les raccourcis utilisent le label de l'activité principale au lieu du nom de l'application. J'ai vu certaines applications comme GMail et Google Keep qui fonctionnent bien. Mais lorsque vous les ouvrez, je remarque que c'est comme un moment entre le titre est vide et le titre apparaît (ce qui semble mieux que le nom de l'application clignote avant de définir le titre en utilisant setTitle()).

Voici donc le la meilleure solution que j'ai trouvée :

Créez un style dans lequel la barre d'action n'affiche pas le titre/l'étiquette :

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

J'utilise un tiroir de navigation et un logo (parce que j'utilise un logo et une icône pour mon application). Vous pouvez utiliser ce que vous voulez, mais ne pas utiliser showTitle . Ensuite, dans le fichier AndroidManifest.xml, définissez le thème de l'activité principale :

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

Ensuite, dans la méthode onCreate() de l'activité principale, définissez le titre de votre barre d'action :

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

Après cela vous pouvez appeler :

getActionBar().setDisplayShowTitleEnabled(true);

C'est difficile mais ça en vaut la peine.

4voto

Adriaan Points 56

Cela ne répondra probablement pas à vos attentes, mais avez-vous pensé à créer un écran d'accueil qui s'affiche très brièvement (avec le titre par défaut) et qui lance ensuite votre nouvelle activité "principale" avec le titre de votre choix en utilisant la commande setTitle(int) méthode ? Je n'ai pas essayé de voir si cela fonctionne, mais cela pourrait créer un contournement agréable qui ne montre pas la nature moins que transparente de ce que vous essayez d'obtenir.

0voto

Cristian Points 92147

Vous pouvez faire quelque chose comme ça :

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

Vous devrez créer une mise en page personnalisée pour contenir le titre. Cela pourrait être aussi simple que (appelé my_title.xml dans ce cas) :

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

Dans votre AndroidManifest.xml il vous suffit de définir le titre de l'application, qui sera affiché dans l'icône du lanceur. Pour votre activité, vous n'avez pas besoin de définir un titre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X