Android: Как изменить значок «Домой» на панели действий, чтобы он отличался от значка приложения?

114

Главный значок моего приложения состоит из двух частей на одном изображении: логотипа и нескольких букв под ним. Это хорошо работает для значка запуска для приложения, но когда значок появляется на левом краю ActionBar, буквы обрезаются, и это выглядит не очень хорошо.

Я хотел бы предоставить ActionBar отдельную версию значка, только с частью «логотипа», а не с буквами под ним, но пока они остаются пустыми. Я, честно говоря, не могу найти на это ответа, да и сам вопрос нигде не могу найти.

Фил Рингсмут
источник

Ответы:

218

ActionBar будет использовать атрибут android: logo вашего манифеста, если он предоставлен. Это позволяет вам использовать отдельные доступные для рисования ресурсы для значка (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>
AlikElzin-kilaka
источник
android: logo также будет работать. Я не знаю разницы.
AlikElzin-kilaka
Извините за заживляющие раны :-) Но разница в том, что предлагаемое здесь решение для изменения стиля применяет настраиваемый значок только к панели действий, где определение android:logoв манифесте может повлиять и на другие области.
dbm
@dbm, не могли бы вы привести пример «других областей»?
AlikElzin-kilaka
2
Да, мне стало так любопытно, что я начал гуглить, и вот что написано на сайте разработчиков Android: developer.android.com/guide/topics/manifest/… . Мне непонятно, чем он отличается от andorid:iconатрибута: developer.android.com/guide/topics/manifest/…
dbm
2
Бар Действия документ также говорит , что вы можете добавить android:iconк <activity>элементу, так что вы можете легко изменить его для различных видов деятельности. Я попробовал это, и это сработало. Не нужно возиться с настраиваемой темой или беспокоиться о влиянии на все действия.
Джейсон
18

Пожалуйста, попробуйте эту строку

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
Феликс Круз
источник
1
ПРИМЕЧАНИЕ: setHomeAsUpIndicatorэто Android API 18+.
Джошуа Пинтер
8

Если вы используете AppCompat, единственный способ установить значок ActionBar на устройствах, на которых работает Gingerbread (API 10) или ниже, - это установить атрибут android: icon в каждом действии в вашем манифесте или программно установить drawable.

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

Обновление: имейте в виду, что значок приложения будет переопределен, если вы установите атрибут android: icon в действии запуска. Единственное, что я знаю, - это создать заставку или фиктивную Activity, которая затем запускает ваше основное Activity.

Это
источник
не работает !! Ты это пробовал? Пожалуйста, найдите решение, которое мне нужно.
Апурва,
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>

Надеюсь, это поможет кому-то другому!

proudgeekdad
источник
Я использую AppCompat v7, потому что хочу поддерживать Android 2.3, но ваш метод не работает.
liam xu
6

Пожалуйста, попробуйте, если вы используете «extends 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"
    ...

Это оно.

awariat
источник
0

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

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

Обновить

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

Stevanicus
источник
Спасибо за эту ссылку, и в конечном итоге я могу удалить буквы со своего значка и использовать один и тот же значок «логотип» во всем приложении, но мне все равно может потребоваться использовать его уменьшенную версию или немного другую версию в ActionBar, и это то, что я пытаюсь выяснить.
Фил Рингсмут,