Як встановити іншу мітку для запуску, а не назву діяльності?


269

Це питання було задано і раніше, але зовсім не відповідає! Тож я знову намагаюся.

Я хочу надати моєму запуску додатків (той, який відображається на стартовому екрані!) Інший, коротший підпис. Здається, запускник приймає свою мітку з розділу 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)методу також не приносить користі, оскільки коротке ім’я буде видно користувачеві короткий час, але досить довго, щоб помітити!

І - будь ласка, не відповідайте на моє запитання, звертаючись до спеціальної панелі заголовків ... Я не хочу йти таким довгим шляхом, лише через дурну назву рядка! Болісно намалювати спеціальний заголовок для такого маленького ефекту!

Чи не існує простого способу просто надати пусковій установці інший рядок для відображення? Дякую за відповіді!

Редагувати: Ще одна причина, чому мати власну панель заголовків - це те, що вона не буде схожа на панель заголовків за замовчуванням, мені доведеться явно робити так, щоб вона виглядала однаково на кожному пристрої! І це не може бути рішенням, якщо, зрештою, я не хочу іншого вигляду!

Відповіді:


470

Мабуть, <intent-filter>може мати атрибут мітки. Якщо вона відсутня, мітка успадковується від батьківського компонента (або Діяльність, або Програма). Таким чином, використовуючи це, ви можете встановити мітку для піктограми запуску, зберігаючи активність із власною назвою.

Зауважте, що, хоча це працює на емуляторах, він може не працювати на реальних пристроях, оскільки це залежить від запущеної програми запуску.

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> також може мати атрибут значка, але, зрозуміло, він не перекриває піктограму, вказану в Діяльності. Це може бути важливим для вас, якщо ви плануєте використовувати вбудований ActionBar в SDK 11+, який використовує піктограму та логотип, зазначені в діяльності.

Додана інформація: Мітка успадковується від діяльності, а не від програми.

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


5
Гей, це чудово !! Я спробую сьогодні ввечері. Нічого собі, чому така штука не задокументована ?? !! Я знаю, чому мені не подобаються ці дивні структури XML ... ;-)
Zordid,

13
О ні, о ні. Розчарований зараз. Чисті Android-пускові установки (на емуляторах!) Дійсно роблять те, що ми обговорювали тут, але, наприклад, пускач HTC ігнорує мітку мітки наміру. :-( Як нерозумно! Asus Eee Pad з сотом також не дотримується цієї етикетки.
Zordid

2
Тож те, що ви бачите, це мітка "Активність"? Це ганьба. Я наполовину очікував, що оскільки це не підтверджено документально, хтось, хто пише пускову установку, ймовірно, не буде застосовувати правильну поведінку.
Марк Реноф

12
Працює над моїм пряником Nexus One, Nexus S, а також з "новішими" випусками :-) Але, на жаль, чувак з непослідовністю, я б рекомендував не користуватися цим. Я схильний також оновити відповідь із попередженням.
Марк Ренуф

3
Я не маю уявлення, чому на Землі це так багато відгуків. Чи не люди спочатку перевіряють свій код на реальному пристрої, перш ніж припускати, що щось працює? Це рішення, як заявили інші, НЕ працює на реальному пристрої. Я протестував на 4 пристроях (ванільний та не ванільний Android) і нічого. Це працює лише на емуляторі. Єдиний спосіб, який я знайшов, - це використовувати setTitle, як описано у відповіді Аніли.
Тіаго

35

Я шукав те саме, і ось що для мене спрацювало.

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


Це працює безвідмовно, якщо вам потрібно змінити назву вашої запускової діяльності. Однак ім'я піктограми спалахує близько 1 секунди.
rphello101

2
Якщо ви не заперечуєте, щоб ваш додаток коротко відображав порожню панель дій (тобто взагалі немає заголовка), ви можете змінити стиль панелі дій та видалити showTitleз displayOptions. Тоді ви можете увімкнути заголовок у onCreateтакій діяльності: this.getActionBar (). SetDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); Це краще, ніж миготливе ім'я піктограми, але це означає, що кожна діяльність у вашій програмі повинна буде включати заголовок, якщо цього вимагає.
BruceHill

Це працює безвідмовно, якщо вам потрібно змінити назву вашої запускової діяльності.

Чому ні setTitle(R.string.app_name);?
arekolek

10

Мене не вдалося вирішити Марк Ренуф (використовуючи 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)методом ? Я не намагався цього перевірити, чи спрацьовує це, але це може створити приємну роботу, яка не демонструє не менш витонченого характеру того, що ви намагаєтеся досягти.


2

Для всіх, хто використовує панель інструментів підтримки / Appcompat через setSupportActionBar()метод, заголовок діяльності можна встановити на XML панелі інструментів:

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

Це скасує мітки програми та активності, встановлені в маніфесті.

android.support.v7.widget.Toolbar


1

Я знайшов вирішення цієї проблеми.

В manifest.xml

Напишіть назву програми android:labelу програмі запуску (основної) .

Це зробить ярлик вашої основної діяльності таким же, як і ярлик додатка.

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

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

Тут напишіть ярлик, який ви хочете надати своїй основній діяльності.


0

Ви можете зробити щось подібне:

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


1
Сумніваюсь, що це дійсно так: мітка програми - це не те, що визначає мітку запуску, а лише визначає, як названа програма у списку встановлених програм (налаштування-> програми-> керування програмами), і цю мітку також бере Android Ринок теж. Тому я не хочу цього змінювати. Експериментуючи, я виявив, що цей запуск займає також назва діяльності. Крім цього: ваше рішення передбачає стисну назву, яку я не хочу! Це взагалі ніколи не схоже на титульний рядок за замовчуванням - або мені доведеться зробити дуже багато, щоб отримати поведінку за замовчуванням - зовсім не добре!
Зордід

Хм ... це ще гірше. Я просто спробував ваше рішення. Але заголовок заголовка зовсім не схожий на типовий, і, що ще гірше, типовий заголовок за замовчуванням (із зазначенням короткого імені, якого я не хочу бачити) відображається незадовго до появи спеціального заголовка. Таким чином: це рішення те саме, що просто встановити заголовок за допомогою setTitle. :-(
Зордід

0

Запуск запуску фактично показує android: label і android: icon для активності, що декларують

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

тому етикетка програми не приносить користі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.