Android: Як змінити значок «Домашній» ActionBar на щось інше, ніж піктограма програми?


114

Основна піктограма моєї програми складається з двох частин одного зображення: логотипу та декількох літер під ним. Це добре працює для піктограми запуску програми, але коли значок з’являється в лівій частині панелі ActionBar, листи відрізаються, і це виглядає не так добре.

Я хотів би надати ActionBar окрему версію піктограми, лише частину "логотипу", а не літери під нею, але поки що вони виходять порожніми. Я, чесно кажучи, не можу знайти на це жодної відповіді, і навіть не можу знайти питання ніде.

Відповіді:


218

ActionBar використовуватиме атрибут логотипу android: для вашого маніфесту, якщо такий надається. Це дозволяє використовувати окремі джерела ресурсів для піктограми (Launcher) та логотипу (ActionBar, серед іншого).


2
Так. Ви також можете використовувати спеціальний стиль для панелі дій, щоб вказати логотип або значок, який буде використовуватися замість тих, які надає маніфест.
adamp

@Joe, Будь-яке рішення по API <11 з використанням AppCompat
cafebabe1991

49

В AndroidManifest.xml:

<application
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:name="com..."
    android:theme="@style/Theme">...</Application>

У styles.xml: (Див. android:icon)

<style name="Theme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:icon">@drawable/icon</item>
</style>

android: логотип також буде працювати. Я не знаю різниці.
АлікЕльзін-кілака

Вибачте за те, що відірвали загоюються рани :-) Але різниця полягає в тому, що запропоноване тут рішення про зміну стилю застосовує спеціальний значок лише до панелі дій, де як визначення android:logoв маніфесті може впливати і на інші області.
дбм

@dbm, чи можете ви навести приклад "інших областей"?
AlikElzin-kilaka

2
Так, мені стало так цікаво, що я почав гуглювати на ньому, і про це говорить сайт розробників Android: developer.android.com/guide/topics/manifest/… . Мені незрозуміло, чим це відрізняється від andorid:iconатрибута, хоча: developer.android.com/guide/topics/manifest/…
dbm

2
Бар Дії документ також говорить , що ви можете додати android:iconдо <activity>елементу, так що ви можете легко змінити його для різних видів діяльності. Я спробував це, і це спрацювало чудово. Не потрібно возитися із власною темою або турбуватися про вплив на всі види діяльності.
Джейсон


8

Якщо ви використовуєте AppCompat, єдиний спосіб встановити значок ActionBar на пристроях, на яких працює Пряник (API 10) або нижче, - встановити атрибут android: icon у кожній діяльності у вашому маніфесті або налаштувати програму для малювання програми.

<manifest>
    <application>
        ...
        <activity android:name="com.your.ActivityName"
            ...
            android:icon="@drawable/ab_logo"/>
        ...
   </application>
</manifest>

Оновлення: Однак попередити, що значок програми буде замінено, якщо ви встановите атрибут android: icon під час запуску. Єдина робота, про яку я знаю, - це здійснення сплеску чи фіктивних дій, які потім запускають вашу основну діяльність.


не працює !! Ви пробували? Будь ласка, знайдіть потрібне мені рішення.
Апурва

8

Натхненний TheIT, я просто почав це працювати, маніпулюючи файлом маніфесту, але дещо іншим чином. Встановіть піктограму в налаштуваннях програми так, щоб більшість заходів отримувала значок. До активності, де ви хочете показати логотип, додайте атрибут android: logo до декларації про діяльність. У наступному прикладі логотип повинен мати лише LogoActivity, а інші - за замовчуванням.

<application
    android:name="com.your.app"
    android:icon="@drawable/your_icon"
    android:label="@string/app_name">

    <activity
        android:name="com.your.app.LogoActivity"
        android:logo="@drawable/your_logo"
        android:label="Logo Activity" >

    <activity
        android:name="com.your.app.IconActivity1"
        android:label="Icon Activity 1" >

    <activity
        android:name="com.your.app.IconActivity2"
        android:label="Icon Activity 2" >

</application>

Сподіваюсь, це допоможе комусь ще!


Я використовую AppCompat v7, тому що я хочу підтримувати Android 2.3, але у вас метод не працює.
liam xu

6

Будь ласка, спробуйте, якщо використовується "розширює AppCompatActivity" та присутня панель дій.

 ActionBar eksinbar=getSupportActionBar();
if (eksinbar != null) {
    eksinbar.setDisplayHomeAsUpEnabled(true);
    eksinbar.setHomeAsUpIndicator(R.mipmap.imagexxx);
}

3

створення логотипу

у папках drawable-...створюються у всіх " " папках logo.png. Розташування папок: [YOUR APP]\app\src\main\res

У рядок додавання AndroidManifest.xml: android:logo="@drawable/logo"

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:logo="@drawable/logo"
    ...

Це воно.


0

Ви можете перевірити це, отримавши все необхідне для значків додатків

http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

оновлення

Я думаю, що за замовчуванням він використовує піктограму запуску ... Найкраще зробити це окремим зображенням ... Розроблений для панелі дій та використання цього. Для цього перевірте: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems


Дякую за це посилання, і я можу в кінцевому підсумку видалити літери зі своєї піктограми та використовувати один і той самий значок "логотипу" у всьому додатку, але, можливо, мені все ж доведеться використовувати меншу версію або трохи іншу його версію на ActionBar, і саме це я намагаюся з’ясувати.
Філ Рінгсмут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.