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

StackOverflow https://stackoverflow.com/questions/3488664

Вопрос

Этот вопрос задавался раньше - но без какого-либо удовлетворительного ответа вообще!Так что я пробую еще раз.

Я хочу присвоить значку запуска моего приложения (тому, который отображается на стартовом экране!) другую, более короткую подпись.Похоже, что лаунчер берет свою метку из раздела 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) метод тоже не приносит пользы, потому что короткое имя будет видно пользователю в течение короткого времени, но достаточно долго, чтобы заметить!

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

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

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

Это было полезно?

Решение

Очевидно <intent-filter> может иметь атрибут label.Если он отсутствует, метка наследуется от родительского компонента (либо 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>

Боковое примечание:<intent-filter> также может иметь атрибут icon, но необъяснимым образом это так нет переопределите значок, указанный в действии .Это может быть важно для вас, если вы планируете использовать встроенную панель действий в 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 будет отображаться со значком запуска, если мы не поместим внутри ярлык, как упоминалось выше.

Другие советы

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

<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-файла.

Решение Mark Renouf не удается для меня (используя Nexus 4 и Android 4.4). Он не удается при использовании ярлыков, ярлыки используют основную метку активности вместо имени приложения. Я видел несколько приложений, таких как Gmail, и Google продолжают работать хорошо. Но когда вы их открываете, я замечаю, что это как момент между заголовками пустота, и появляется заголовок (который кажется лучше, чем мигает имя приложения, прежде чем настроить заголовок с использованием 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>

Я использую навигационный ящик и использую логотип (потому что я использую логотип и значок для моего приложения). Вы можете использовать все, что Не используйте Switchtitle. Отказ Тогда в AndroidManifest.xml установите тему на основную активность:

<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 () основной активности установите заголовок вашей панели действий:

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

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

getActionBar().setDisplayShowTitleEnabled(true);

Хитрый, но стоит.

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

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

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

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

android.support.v7.widget.toolbar.

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

В manifest.xml

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

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

Тогда в onCreate() Функция вашего Усилитель (главная) активность Напишите это утверждение

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

Здесь напишите этикетку, которую вы хотите дать на работу вашего Launcher (основной).

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

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 Файл, который вам просто нужно установить заголовок для приложения, который будет то, что будет отображаться в значке запуска. Для вашей деятельности вам не нужно установить там заголовок.

Лаунчер на самом деле показывает Android: Label и Android: значок для деятельности (IES), которые объявляют

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

Так что этикетка приложений бесполезно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top