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


Esta pregunta se ha hecho antes - ¡pero sin ninguna respuesta satisfactoria en absoluto! Así que lo estoy intentando de nuevo.

Quiero dar mi icono de lanzador de aplicaciones (el que se muestra en la pantalla de inicio!) un título diferente, más corto. Parece que el lanzador toma su etiqueta de la sección mainfest 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 aqui.

BUT-big BUT : esto también por supuesto 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! Establecer el título largo de nuevo en onCreate usando el método setTitle(int) tampoco es bueno, porque el nombre corto será visible para el usuario por un corto tiempo, pero lo suficientemente largo como para darse cuenta!

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

¿No hay una manera fácil de simplemente darle al lanzador una cadena diferente para mostrar? Gracias por sus respuestas!

Edit: Una razón más por la que tener una barra de título personalizada es un dolor 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 un diferente apariencia!

Author: captncraig, 2010-08-15

8 answers

Aparentemente <intent-filter> puede tener un atributo label. Si está ausente, la etiqueta se hereda del componente padre (Actividad o Aplicación). Así que usando esto, puede establecer una etiqueta para el icono del lanzador, mientras que todavía tiene la Actividad con su propio título.

Tenga en cuenta que, si bien esto funciona en emuladores, puede que no funcione en dispositivos reales, ya que depende de la implementación del lanzador que es utilizar.

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: también puede tener un atributo icon, pero inexplicablemente hace no sobreescribir el icono especificado en el Actividad. Esto puede ser importante para usted si planea utilizar el nativo ActionBar en SDK 11+, que utiliza el icono y el logotipo especificados en el Actividad.

Información añadida: La etiqueta se hereda de 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 dentro como se mencionó anteriormente.

 464
Author: Mark Renouf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-18 01:19:31

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 lanzador de aplicaciones.

Para añadir un nombre más grande a la barra de aplicaciones solo tienes que añadir:

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

A su archivo java de actividad principal.

 28
Author: Anila,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-13 13:07:26

Solución de Mark Renouf me falla (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 funciona bien. Pero cuando los abres, me doy cuenta de 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 parpadeando antes de configurar el título usando setTitle()).

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

Crear un estilo donde la barra de acción 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 cajón de navegación y un logotipo (porque uso un logotipo y un icono para mi aplicación). Puedes usar lo que sea pero no uses showTitle. Luego en el AndroidManifest.xml, establece el tema para la actividad principal:

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

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

Después de esto , puedes llamar:

getActionBar().setDisplayShowTitleEnabled(true);

Difícil pero vale la pena.

 9
Author: Ferran Negre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-28 08:27:49

Esto probablemente no satisfaga lo que desea hacer, pero ¿ha pensado en crear una pantalla de bienvenida que se muestre muy brevemente (con el título predeterminado) y luego inicie su nueva actividad "principal" real con el título de su elección utilizando el método setTitle(int)? No he intentado esto para ver si funciona, pero eso podría crear un trabajo agradable que no muestre la naturaleza menos que perfecta de lo que está tratando de lograr.

 4
Author: Adriaan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-25 10:41:43

He encontrado una solución para este problema

En manifest.xml

Escribe el nombre de tu app en el android:label de la actividad(principal) del lanzador .

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

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

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

Aquí escriba la etiqueta que desea dar a su actividad de Lanzador(principal).

 1
Author: Tanuj Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-12 13:32:45

Para cualquiera que use Support/Appcompat Toolbar a través del método setSupportActionBar(), el título de la actividad se puede establecer en Toolbar XML:

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

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

Androide.apoyo.v7.widget.Barra de herramientas

 1
Author: Maksim Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-02 21:53:39

, puedes 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 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 tu archivo AndroidManifest.xml solo tienes que establecer el título de la app, que es lo que se va a mostrar en el icono del launcher. Para tu actividad no necesitas establecer un título allí.

 0
Author: Cristian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-15 18:48:39

El lanzador en realidad muestra android: label y android: icon para las actividades que declaran

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

Así que la etiqueta de la aplicación no sirve de nada.

 0
Author: Rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-11 14:49:58