2010-08-15 25 views
245

Esta pregunta se ha formulado antes, ¡pero sin ninguna respuesta satisfactoria! Así que lo estoy intentando de nuevo.¿Cómo se establece una etiqueta diferente para el iniciador en lugar del título de la actividad?

Quiero dar a mi icono de iniciador de aplicaciones (el que se muestra en la pantalla de inicio!) Un título diferente, más corto. Al parecer, el lanzador toma su etiqueta de la sección mainfest sobre la etiqueta de la actividad principal, como en este caso:

<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 que cambió la referencia original a de mi aplicación nombre @ string/nombre_apl a una diferente, más corto recurso de cadena aquí.

PERO - grande PERO: ¡esto también por supuesto cambia el título predeterminado de esta actividad! Y no quería que eso ocurriera, ¡hay suficiente espacio para un largo nombre de aplicación! Establecer el título largo de nuevo en onCreate utilizando el método setTitle(int) tampoco sirve de nada, porque el nombre breve será visible para el usuario durante un corto período de tiempo, pero el tiempo suficiente para notarlo.

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

¿No hay forma fácil de darle simplemente al iniciador una secuencia diferente para mostrar? ¡Gracias por tus respuestas!

Edición: Una razón más por la que tener una barra de título personalizada es un problema es que no se parecerá a la barra de título predeterminada, ¡tendría que hacer cosas explícitamente para que se parezca en cada dispositivo! Y esa no puede ser una solución si, después de todo, ¡no quiero una apariencia diferente!

Respuesta

453

Al parecer, <intent-filter> puede tener un atributo de etiqueta. Si está ausente, la etiqueta se hereda del componente principal (ya sea Actividad o Aplicación). Así que al usar esto, puede establecer una etiqueta para el ícono del iniciador, mientras que todavía tiene la Actividad con su propio título.

Tenga en cuenta que, aunque funciona en emuladores, es posible que no funcione en dispositivos reales, ya que 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: < intención de filtro> también puede tener un atributo icono, pero inexplicablemente se hace no anulación del icono especificado en el actividad. Esto puede ser importante para usted si planea usar el ActionBar nativo en el SDK 11+, que usa el icono y el logotipo especificados en la actividad .

Agregado Info: La etiqueta se hereda de la actividad y no 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 lanzador, si no ponemos etiqueta en el interior como se mencionó anteriormente.

+4

¡¡¡¡¡¡Eso es genial !! Lo intentaré esta noche. Vaya, ¿por qué tal cosa no está documentada adecuadamente? Sé por qué no me gustan estas extrañas estructuras XML ... ;-) – Zordid

+12

Oh no, oh no. Decepcionado ahora. Los lanzadores puros de Android (¡en emuladores!) Realmente hacen lo que discutimos aquí, pero p. El iniciador de HTC ignora la etiqueta de la etiqueta de la intención. :-(¡Qué estúpido! Asus Eee Pad con Honeycomb tampoco se adhiere a esa etiqueta. – Zordid

+2

Entonces, ¿qué estás viendo es la etiqueta de Actividad? Es una pena. Casi esperaba que, dado que esto no está documentado, cualquiera que escriba un lanzador probablemente no implementaría el comportamiento correcto. –

0

se puede hacer algo como esto:

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

Usted tendrá que crear un diseño personalizado para mantener el título. Podría ser tan simple como (llamado my_title.xml en este caso):

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

En el archivo AndroidManifest.xml sólo hay que definir el título de la aplicación, que es lo que va a ser mostrado en el icono de lanzador. Para su actividad no necesita establecer un título allí.

+1

dudo que eso es realmente cierto: la etiqueta de la aplicación es ** ** no lo define el lanzador etiqueta se limita a definir cómo la aplicación es nombrado en la lista de aplicaciones instaladas (Preferencias-> Aplicaciones- > administrar aplicaciones) y esta etiqueta también es adoptada por Android Market. Entonces no quiero cambiar eso. Experimentando descubrí que es el título de la actividad que toma el iniciador también. Aparte de eso: ¡su solución implica un título de cutsom que no quiero! Esto nunca se parece a la barra de título predeterminada en absoluto, o tendría que hacer mucho para obtener el comportamiento predeterminado, ¡nada bueno! – Zordid

+0

Hmm ... es aún peor. Acabo de probar tu solución. Sin embargo, la barra de título no se parece en absoluto a la predeterminada y, lo que es peor, la barra de título predeterminada (que muestra el nombre corto que no quiero ver) aparece poco antes de que aparezca la barra de título personalizada. Por lo tanto: esta solución es lo mismo que simplemente establecer el título usando 'setTitle'. :-( – Zordid

4

Esto probablemente no satisfaga lo que quiere hacer, pero ¿ha pensado en crear una pantalla de inicio que se muestra muy brevemente (con el título predeterminado) y luego inicia su nueva actividad "principal" con el título de su elegir usando el método setTitle(int)? No he intentado esto para ver si funciona, pero eso podría crear un trabajo agradable que no muestra la naturaleza poco transparente de lo que estás tratando de lograr.

+0

¡Esto realmente funciona en piruleta! – Keith

28

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 dará un nombre corto al icono del iniciador de aplicaciones.

Para añadir un nombre más grande de la barra de aplicaciones sólo hay que añadir:

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

a su archivo principal actividad de java.

+0

Esto funciona sin falta si necesita cambiar el título en su actividad de iniciador. Sin embargo, muestra el nombre del icono por aproximadamente 1 segundo. – rphello101

+2

Si no le importa que su aplicación muestre brevemente una barra de acciones en blanco (es decir, sin título), puede cambiar el estilo de su barra de acciones y eliminar 'showTitle' de' displayOptions'. Luego puede activar el título en la actividad 'onCreate' como esta: this.getActionBar(). SetDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); Esto es mejor que el nombre del icono que parpadea, pero significa que cada actividad en su aplicación tendrá que activar el título si así lo requiere. – BruceHill

+0

Esto funciona sin falta si necesita cambiar el título en su actividad de iniciador. –

9

La solución de Mark Renouf me falla (usando Nexus 4 y Android 4.4). Al utilizar accesos directos falla, los accesos directos usan la etiqueta de actividad principal en lugar del nombre de la aplicación. Vi algunas aplicaciones como GMail y Google Keep que funciona bien. Pero cuando los abres, noto que es como un momento entre el título está en blanco y aparece el título (que parece mejor que el nombre de la aplicación parpadeante antes de configurar el título usando setTitle()).

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

crear un estilo donde la Barra de acciones no muestra 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 panel lateral de navegación y el uso de una logotipo (porque uso un logotipo y un ícono para mi aplicación). Puede usar cualquier cosa excepto no use showTitle. Luego, en el AndroidManifest.xml, establecer el tema de la 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> 

a continuación, en el método onCreate() de la MainActivity, establecer el título de la barra de acción:

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

Después que, puede llamar a:

getActionBar().setDisplayShowTitleEnabled(true); 

difícil, pero vale la pena.

1

He encontrado una solución para este problema

En manifest.xml

Escribir el nombre de su de aplicación en el android:label del iniciador de actividades (principal).

Esto hará que la etiqueta de su actividad principal sea la misma que la de la etiqueta de la aplicación.

Luego, en la función de tu actividad onCreate()Launcher (principal) escribir esta declaración

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

Aquí escriba la etiqueta que se quiere dar a su actividad Launcher (principal).

0

El lanzador realidad muestra androide: etiqueta y android: icono de Actividad (es) que declaran

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

tan etiqueta de aplicación es de ninguna utilidad.

0

Para cualquier persona que utilice Soporte/Appcompat barra de herramientas a través del método setSupportActionBar(), el título de la actividad se puede fijar en la barra de herramientas XML:

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

Esto anulará las etiquetas de aplicación y de actividad establecidos en el manifiesto.

android.support.v7.widget.Toolbar

Cuestiones relacionadas