265 votos

Etiqueta Android Launcher vs título actividad

Esta pregunta se ha hecho antes, pero sin respuesta satisfactoria a todos! Lo estoy intentando de nuevo.

Quiero dar mi solicitud icono launcher (el que se muestra en la startscreen!) de una manera diferente, más corto título. Parece que el lanzador toma su etiqueta de la mainfest sección acerca de la actividad principal de la etiqueta, 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 he cambiado la referencia original a mi nombre de la aplicación @string/app_name a otro, la cadena más corta de los recursos aquí.

PERO - gran PERO: esto, por supuesto, también los cambios de esta actividad por defecto del título! Y yo no quiero que eso suceda, hay suficiente espacio para un largo nombre de la aplicación! Ajuste el largo título de nuevo en onCreate utilizando el setTitle(int) método no es bueno, porque el nombre corto será visible para el usuario por un corto tiempo, pero el tiempo suficiente para ¡aviso!

Y por favor, no conteste a mi pregunta por referencia a una costumbre barra de título... yo no quiero ir por el camino más largo, sólo a causa de una estúpida cadena de título! Es un dolor para dibujar personalizados en la barra de título para tan poco efecto!!!!

¿Hay ninguna manera fácil para dar sólo el iniciador de una cadena diferente a la pantalla? Gracias por sus respuestas!

Edit: Una razón más de por qué tener un personalizados de la barra de título es un dolor, es que no será igual a la predeterminada de la barra de título, tendría que explícitamente hacer las cosas para que se vea igual en todos los dispositivos! Y eso no puede ser una solución si, después de todo, no quiero una apariencia diferente!

467voto

Mark Renouf Puntos 13128

Solución encontrada!

Al parecer, <intent-filter> puede tener un atributo de etiqueta. Si está ausente la etiqueta es heredado de la componente principal (ya sea de la Actividad o de la Aplicación). Así que con esto, usted puede configurar una etiqueta para el icono del launcher, manteniendo la Actividad con su propio título.

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 no reemplazar el icono especificado en el Actividad. Esto puede ser importante si usted planea usar el nativo ActionBar en el SDK 11+, que usa el Icono y Logo especificado en el Actividad.

35voto

Anila Puntos 524

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 a tu icono de lanzador de aplicación. Para añadir un nombre más grande a la barra de aplicación sólo tienes que añadir

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

en la pantalla principal actividad.

10voto

Ferran Negre Puntos 206

Solución de Marca Renouf no me (usando el Nexus 4 y Android 4.4). Se produce un error cuando el uso de accesos directos los accesos directos de uso la actividad principal de la etiqueta en lugar del nombre de la aplicación. He visto algunas aplicaciones, como GMail y Google Mantienen que funciona bien. Pero cuando los abre, me doy cuenta que es como un momento entre el título está en blanco y el título aparece (que parece mejor que el nombre de la aplicación de parpadear antes de poner el título mediante setTitle()).

Así que aquí está la mejor solución que he encontrado:

Crear un estilo donde la ActionBar, no se 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 cajón de navegación y el uso de un logotipo (porque yo uso un logotipo y un icono para mi aplicación). Usted puede usar lo que sea, pero no uso showTitle. A continuación, en el AndroidManifest.xml, 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 onCreate() método de la MainActivity, establece el título de tu Barra de Acción:

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

Después de esto, usted puede llamar a:

getActionBar().setDisplayShowTitleEnabled(true);

Difícil pero vale la pena.

4voto

Adriaan Puntos 56

Esto probablemente no satisface lo que quieres hacer, pero ¿has pensado en crear una pantalla que muestra muy brevemente (con el título por defecto) y luego lanza su nueva actividad "principal" real con el título de su elección usando el setTitle(int) método? No he probado esto para ver si funciona pero que podría crear un trabajo agradable que no muestra al menos que la naturaleza perfecta de lo está tratando de lograr.

0voto

Cristian Puntos 92147

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

Tendrás que crear un diseño personalizado para ostentar 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 su AndroidManifest.xml archivo, sólo tienes que establecer el título de la aplicación, que es lo que va a ser mostrado en el icono del lanzador. No necesitas establecer allí un título para su actividad.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X