Как установить другую метку для запуска, а не название активности? - PullRequest
263 голосов
/ 15 августа 2010

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

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

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

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

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

Ответы [ 8 ]

465 голосов
/ 31 августа 2011

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

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

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>

Примечание стороны:также может иметь атрибут icon, но по непонятным причинам он не переопределяет значок, указанный в Activity.Это может быть важно для вас, если вы планируете использовать встроенный ActionBar в SDK 11+, который использует значок и логотип, указанные в упражнении.

Дополнительная информация: Метканаследуется от Activity, а не от Application.

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

34 голосов
/ 05 апреля 2012

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

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

10 голосов
/ 28 апреля 2014

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

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

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

<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 голосов
/ 25 августа 2010

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

2 голосов
/ 03 декабря 2017

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

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

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

android.support.v7.widget.Toolbar

1 голос
/ 12 августа 2017

Я нашел решение этой проблемы

В manifest.xml

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

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

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

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

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

0 голосов
/ 29 сентября 2017

На самом деле в панели запуска отображаются android: label и android: значок для активности (й), которые объявляют

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

, поэтому метка приложения не используется.

0 голосов
/ 15 августа 2010

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

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

...