¿Cómo configurar una etiqueta diferente para el iniciador en lugar del título de la actividad?

Resuelto Zordid asked hace 54 años • 8 respuestas

Esta pregunta ya se ha hecho antes, ¡pero sin respuesta satisfactoria! Así que lo intentaré de nuevo.

Quiero darle al ícono del iniciador de aplicaciones (¡el que se muestra en la pantalla de inicio!) un título diferente y más corto. Parece que el lanzador toma su etiqueta de la sección principal sobre la etiqueta de la actividad principal, como aquí:

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

Ya cambié la referencia original al nombre de mi aplicación @string/app_name a un recurso de cadena diferente y más corto aquí.

PERO - gran PERO : ¡esto, por supuesto, también cambia el título predeterminado de esta actividad! Y no quería que eso sucediera, ¡hay suficiente espacio para un nombre de aplicación largo! Configurar el título largo nuevamente al onCreateusar el setTitle(int)método tampoco sirve de nada, porque el nombre corto será visible para el usuario por un corto tiempo, ¡pero lo suficiente como para notarlo!

Y, por favor, no responda mi pregunta haciendo referencia a una barra de título personalizada... ¡No quiero llegar tan lejos, sólo por un estúpido título de cadena! ¡Es una molestia dibujar una barra de título personalizada con tan poco efecto!

¿No existe una manera fácil de darle al iniciador una cadena diferente para mostrar? ¡Gracias por tus respuestas!

Editar: Una razón más por la que tener una barra de título personalizada es una molestia es que no se verá como la barra de título predeterminada, ¡tendría que hacer cosas explícitamente para que se vea igual en cada dispositivo! ¡Y eso no puede ser una solución si, después de todo, no quiero una apariencia diferente!

Zordid avatar Jan 01 '70 08:01 Zordid
Aceptado

Aparentemente <intent-filter>puede tener un atributo de etiqueta. Si está ausente, la etiqueta se hereda del componente principal (ya sea Actividad o Aplicación). Entonces, al usar esto, puede establecer una etiqueta para el ícono del iniciador, sin dejar de tener la Actividad con su propio título.

Tenga en cuenta que, si bien esto funciona en emuladores, es posible que no funcione en dispositivos reales, porque depende de la implementación del iniciador que se utilice.

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>

Nota al margen: <intent-filter> también puede tener un atributo de icono, pero inexplicablemente no anula el icono especificado en la Actividad. Esto puede ser importante para usted si planea usar la ActionBar nativa en SDK 11+, que usa el icono y el logotipo especificados en la actividad.

Información agregada: la etiqueta se hereda de la Actividad y no de la Aplicación.

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

En este caso, app_long_name se mostrará con el icono del iniciador, si no colocamos la etiqueta dentro como se mencionó anteriormente.

Mark Renouf avatar Aug 30 '2011 23:08 Mark Renouf

Estaba buscando lo mismo y esto es lo que funcionó para mí.

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

Esto le dará un nombre corto al icono del iniciador de aplicaciones.

Para agregar un nombre más grande a la barra de la aplicación solo debes agregar:

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

a su archivo java de actividad principal.

Anila avatar Apr 05 '2012 10:04 Anila

Me falla la solución de Mark Renouf (usando Nexus 4 y Android 4.4). Falla al usar atajos, los atajos usan la etiqueta de actividad principal en lugar del nombre de la aplicación. Vi algunas aplicaciones como GMail y Google Keep que funcionan bien. Pero cuando los abres, noto que es como un momento entre el título está en blanco y el título aparece (lo que parece mejor que el nombre de la aplicación parpadeando antes de configurar el título usando setTitle()).

Así que aquí está la mejor solución que encontré :

Cree un estilo donde la ActionBar no muestre el título/etiqueta:

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

Estoy usando un cajón de navegación y un logotipo (porque uso un logotipo y un ícono para mi aplicación). Puedes usar lo que sea pero no uses showTitle . Luego, en AndroidManifest.xml, configure el tema para MainActivity:

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

Luego, en el método onCreate() de MainActivity, establece el título de tu barra de acción:

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

Después de eso , puedes llamar:

getActionBar().setDisplayShowTitleEnabled(true);

Difícil pero vale la pena.

Ferran Negre avatar Apr 28 '2014 08:04 Ferran Negre