Android: как изменить значок ActionBar Home, чтобы он отличался от значка приложения?

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

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


person Phil Ringsmuth    schedule 14.06.2011    source источник


Ответы (8)


Панель действий будет использовать атрибут android:logo вашего манифеста, если он при условии. Это позволяет использовать отдельные ресурсы для рисования для значка (Launcher) и логотипа (ActionBar, среди прочего).

person Joe    schedule 15.06.2011
comment
Ага. Вы также можете использовать собственный стиль для своей панели действий, чтобы предоставить логотип или значок, которые будут использоваться вместо тех, что указаны в манифесте. - person adamp; 15.06.2011
comment
@Joe, любое решение для API‹11 с использованием AppCompat - person cafebabe1991; 04.11.2015

В 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>
person AlikElzin-kilaka    schedule 28.11.2012
comment
android:logo также будет работать. Я не знаю разницы. - person AlikElzin-kilaka; 28.11.2012
comment
Извините, что разрываю заживающие раны :-) Но разница в том, что предложенное здесь решение по изменению стиля применяет пользовательский значок только к панели действий, тогда как определение android:logo в манифесте может повлиять и на другие области. - person dbm; 12.09.2013
comment
@dbm, не могли бы вы привести пример «других областей»? - person AlikElzin-kilaka; 12.09.2013
comment
Да, мне стало так любопытно, что я начал гуглить, и вот что говорится на сайте разработчиков Android: developer.android.com/guide/topics/manifest/. Однако мне непонятно, чем он отличается от атрибута andorid:icon: developer.android.com/guide/topics/manifest/ - person dbm; 13.09.2013
comment
В документе панели действий также говорится, что вы можете добавить android:icon к <activity> элемент, поэтому вы можете легко изменить его для различных действий. Я попробовал это, и это сработало отлично. Не нужно возиться с пользовательской темой или беспокоиться о том, чтобы повлиять на все действия. - person Jason; 21.09.2013
comment
@kilaka Я думаю, что разница в том, что android:logo не работает с библиотекой поддержки (AppCompat). - person fikr4n; 25.11.2013
comment
я хочу добавить изображение в крайний левый угол логотипа приложения на панели действий, как мне это сделать?? Является ли это возможным - person Sagar Devanga; 24.11.2014

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

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
person Trần Thị Diệu My    schedule 11.04.2016
comment
ПРИМЕЧАНИЕ. setHomeAsUpIndicator — это Android API 18+. - person Joshua Pinter; 11.10.2019

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

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

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

person TheIT    schedule 02.05.2014
comment
не работает!! Ты пробовал это? Пожалуйста, найдите решение, оно мне нужно. - person Apurva; 09.01.2015

Вдохновленный 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>

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

person proudgeekdad    schedule 01.09.2014
comment
Я использую AppCompat v7, потому что хочу поддерживать Android 2.3, но ваш метод не работает. - person liam xu; 27.12.2014

Пожалуйста, попробуйте, если вы используете «extends AppCompatActivity» и присутствует панель действий.

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

создание логотипа

в папках "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"
    ...

Это оно.

person awariat    schedule 27.09.2014

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

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

обновить

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

person Stevanicus    schedule 14.06.2011
comment
Спасибо за эту ссылку, и я могу в конечном итоге удалить буквы из моего значка и использовать один и тот же значок логотипа во всем приложении, но мне все равно может понадобиться использовать его уменьшенную версию или немного другую версию на панели действий. , и это то, что я пытаюсь выяснить. - person Phil Ringsmuth; 15.06.2011