Как установить другую метку для запуска, а не название действия?

Этот вопрос был задан раньше - но без какого-либо удовлетворительного ответа! Поэтому я снова пытаюсь.

Я хочу предоставить значок приложения для запуска приложения (тот, который отображается на стартовом экране!) другой, более короткий заголовок. Кажется, что запускает метка из раздела mainfest об основной ярлыке активности, как здесь:

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

Я уже изменил исходную ссылку на мое имя приложения @string/app_name на другой, более короткий ресурс строки здесь.

НО - большой НО: это также, конечно, изменяет название этой активности по умолчанию! И я не хотел, чтобы это произошло, достаточно места для длинного имени приложения! Установка длинного заголовка снова в onCreate с помощью метода setTitle(int) тоже не подходит, потому что короткое имя будет видимым для пользователя на короткое время, но достаточно долго, чтобы заметить!

И - пожалуйста, не отвечайте на мой вопрос, ссылаясь на пользовательский заголовок... Я не хочу идти так долго, просто из-за глупого заголовка строки! Это боль, чтобы нарисовать пользовательскую панель заголовков для такого небольшого эффекта!

Есть ли не простой способ, чтобы просто дать пусковой панели другую строку для отображения? Спасибо за ваши ответы!

Изменить: Еще одна причина, по которой использование настраиваемой панели заголовков - это боль, заключается в том, что она не будет похожа на панель заголовков по умолчанию, я должен был бы явно делать что-то, чтобы она выглядела одинаково на каждом устройстве! И это не может быть решением, если, в конце концов, я не хочу другого вида!

Ответ 1

По-видимому <intent-filter> может иметь атрибут метки. Если он отсутствует, метка наследуется от родительского компонента (либо Activity, либо Application). Таким образом, используя это, вы можете установить метку для значка пусковой установки, но при этом иметь актив с собственным названием.

Обратите внимание, что, хотя это работает на эмуляторах, оно может не работать на реальных устройствах, поскольку оно зависит от используемой реализации запуска.

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>

Боковое примечание: < намерение-фильтp > может также иметь атрибут значка, но необъяснимо он не отменяет значок, указанный в Мероприятия. Это может быть важно для вас, если вы планируете использовать ActionBar в SDK 11+, в котором используются значки и логотипы, указанные на Активность.

Добавлена ​​информация: Метка наследуется от Activity, а не приложения.

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

В этом случае app_long_name будет отображаться с иконкой запуска, если мы не помещаем этикетку внутри, как указано выше.

Ответ 2

Я искал то же самое, и вот что сработало для меня.

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

Это даст краткое имя вашей иконке запуска приложения.

Чтобы добавить большее имя в панель приложений, вам просто нужно добавить:

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

в ваш основной Java файл активности.

Ответ 3

Решение Mark Renouf не удается мне (используя Nexus 4 и Android 4.4). Он не работает при использовании ярлыков, ярлыки используют ярлык основной деятельности вместо имени приложения. Я видел некоторые приложения, такие как GMail и Google Keep, которые отлично работают. Но когда вы открываете их, я замечаю, что это как минута между заголовком, и заголовок появляется (что кажется лучше, чем имя приложения мигает перед установкой заголовка с помощью setTitle()).

Итак, вот лучшее решение, которое я нашел:

Создайте стиль, в котором ActionBar не отображает название/метку:

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

Я использую навигационный ящик и использую логотип (потому что я использую логотип и значок для своего приложения). Вы можете использовать все, кроме , не использовать showTitle. Затем в AndroidManifest.xml задайте тему для 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>

Затем в методе onCreate() MainActivity задайте заголовок своей панели действий:

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

После этого вы можете позвонить:

getActionBar().setDisplayShowTitleEnabled(true);

Трудно, но стоит.

Ответ 4

Это, вероятно, не удовлетворит то, что вы хотите сделать, но подумали ли вы о создании экрана заставки, который отображается очень кратко (с заголовком по умолчанию), а затем запускает новую реальную "основную" деятельность с названием по вашему выбору используя метод setTitle(int)? Я не пробовал это, чтобы увидеть, работает ли это, но это может создать приятную работу вокруг, которая не показывает, что это не так, как просто, что вы пытаетесь достичь.

Ответ 5

Я знаю, что это поздний ответ. Но я надеюсь, что это будет полезно кому-то.

Фактическое (и самое простое) решение

Создайте псевдоним действия, используя тег <activity-alias> в AndroidManifest.xml. Дайте ему более короткий заголовок (даже значок), который вы хотите установить.

  • Псевдоним может быть независимым объектом, подобным активности. Цель
  • активность должна быть указана с использованием атрибута targetActivity.
  • Он может иметь свой собственный ярлык, значок (любой атрибут, который имеет действие).
  • Он может иметь свой собственный набор фильтров намерения.

Ответ 6

Я нашел обходной путь для этой проблемы

 В manifest.xml

Напишите < имя приложения в android:label запуска (основного) действия.

Это сделает ярлык вашего основного действия таким же, как и ярлык приложения.

Затем в onCreate() функции вашего Launcher (основного) действия напишите это выражение

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

Здесь напишите ярлык, который вы хотите передать своей основной деятельности (Launcher).

Ответ 7

Вы можете сделать что-то вроде этого:

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

Вам нужно будет создать собственный макет, чтобы сохранить заголовок. Это может быть так же просто, как (в данном случае my_title.xml):

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

В вашем файле AndroidManifest.xml вам просто нужно установить заголовок для приложения, что будет показано на значке запуска. Для вашей деятельности вам не нужно указывать заголовок.

Ответ 8

The launcher actually shows android:label and android:icon for activity(ies) that declare

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
so application label is of no use.

Ответ 9

Для тех, кто использует панель инструментов Поддержка /Appompat с помощью метода setSupportActionBar(), заголовок Activity может быть установлен на панели инструментов XML:

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

Это переопределит ярлыки приложений и активности, установленные в манифесте.

android.support.v7.widget.Toolbar