Удалить значок / логотип с панели действий на Android


146

Я пытался найти способ удалить значок / логотип с панели действий, но единственное, что я обнаружил после часа поиска в SO, документации Android и Google, - это как удалить строку заголовка в целом. Это не то, что я хочу. Только хочу удалить значок / логотип из строки заголовка.

Кто-нибудь знает, как это сделать? Предпочтительно я хотел бы сделать это в XML .


1
Вы могли бы просто прочитать руководство по API на панели действий. Это сказано прямо в путеводителе.
Mgamerz

6
Каждый кусок информации где-то можно найти.
Храфн

можете ли вы показать нам, что вы пробовали? что вы нашли ранее, что не работает?
DForck42

@ DForck42 Этот вопрос больше не актуален (почти 4 года). Вы можете найти множество способов достижения этого в ответах ниже.
Храфн

Ответы:


58

Если вы определили android:logo="..."в <application>теге вашегоAndroidManifest.xml , то вам нужно использовать этот материал, чтобы скрыть значок:

тема до v11

<item name="logo">@android:color/transparent</item>

v11 и выше тема

<item name="android:logo">@android:color/transparent</item>

Использование этих двух стилей правильно скрыло для меня значок панели действий на устройствах 2.3 и 4.4 (это приложение использует AppCompat ).


Это работает, но в моем случае, когда у меня есть вид поиска и я щелкаю по нему / раскрываю его, значок / логотип моего приложения появляется снова. Любые идеи?
acrespo

@acrespo хм Я знаю, о чем ты говоришь, но я не нашел решения для этого, извини.
Чарльз Мадер

1
То , что я в конечном итоге делает это установка <application (...) android:logo="@android:color/transparent"> (...)в моей AndroidManifest.xmlи принуждать useLogoк displayOptionsв моем стиле , как это <item name="android:displayOptions">showHome|useLogo|homeAsUp|showTitle</item> <item name="displayOptions">showHome|useLogo|homeAsUp|showTitle</item>. Эта последняя часть была важна, так как в некоторых устройствах (я думаю, в основном после леденца на палочке) проклятый поисковый запрос взял appIcon и поместил его вместо логотипа, даже если логотип был прозрачным: s
acrespo

228

Добавьте следующий код в стили панели действий:

<item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
<item name="displayOptions">showHome|homeAsUp|showTitle</item>
<item name="android:icon">@android:color/transparent</item> <!-- This does the magic! -->

PS: я использую Actionbar Sherlock, и это прекрасно работает.


2
Довольно хороший трюк, спасибо! Он даже перестает занимать место в панели действий!
Игорь Чордаш

6
Спасибо ... он работал в коде также ... actionBar.setIcon (android.R.color.transparent);
Джагдип Сингх

1
Отличный ответ ... :)
Байт-код

24
Некоторые устройства Samsung отображаются @android:color/transparentкак ЧЕРНЫЕ. Кажется сумасшедшим, но многие производители устройств игнорируют настройки Android по умолчанию; в том числе цветов. Из-за этого я хотел бы создать цвет в colors.xml следующим образом: <color name="transparent">#00000000</color>и ссылаться на него вместо получения значения от Android.
Мэтт W

1
@jose_GD: android: displayOptions - только v11 и выше, поэтому вам нужно, чтобы оба были обратно совместимы.
Нильзор

115

Если вы не хотите значок в конкретной деятельности.

getActionBar().setIcon(
   new ColorDrawable(getResources().getColor(android.R.color.transparent)));    

45
. getActionBar () SetIcon (android.R.color.transparent); Кажется, достаточно
Мальчик

Вызовите метод getActionBar () .... это лучшее решение этой проблемы (уберите значок с панели действий), потому что если вы используете панель навигации и панель действий, значит, ваша панель действий будет выше панели навигации. Если вы используете setDisplayShowHomeEnabled (false), панель навигации будет находиться над панелью действий, а вы этого не хотите.
Хоркавна

Я бы изменил это на: ColorDrawable cd = new ColorDrawable(getResources().getColor(android.R.color.transparent)); cd.setBounds(0,0,0,0); getActionBar().setIcon(cd); без установки границ прозрачный значок все еще
занимает

1
@Aedis: по-прежнему показывает пустое место слева от панели действий. какие-либо предложения?
Роуэн

Это отлично работает, если вы не установили логотип. В моем случае мне пришлось использовать setLogoвместо setIconметода. Тем не менее, отличный совет, вывели меня на правильный путь !!
Луискоста

49

Это сработало для меня

getActionBar().setDisplayShowHomeEnabled(false);

2
Это помещает панель действий под вкладками / панелью навигации. По-видимому, это поведение « нарочно
Роджер Кис

Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн

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

28

призвание

mActionBar.setDisplayHomeAsUpEnabled(true);

в дополнении к,

mActionBar.setDisplayShowHomeEnabled(false);

будет скрывать логотип, но отображать значок Home As Up. :)


Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн

@Hrafn - я думал, что XML был предпочтительным ответом, а не ЕДИНСТВЕННЫМ ответом. :( Я думаю, это все еще помогает людям. :)
Atul O Holic

15

Быть в курсе, что:

<item name="android:icon">@android:color/transparent</item>

Также сделает ваши параметры пунктов прозрачными.


13
    //disable application icon from ActionBar
    getActionBar().setDisplayShowHomeEnabled(false);

    //disable application name from ActionBar
    getActionBar().setDisplayShowTitleEnabled(false);

Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн

12
getActionBar().setIcon(android.R.color.transparent);

Это сработало для меня.


11

Удалить или показать заголовок, используя:

getActionBar().setDisplayShowTitleEnabled(true);

Удалить или показать логотип, используя:

getActionBar().setDisplayUseLogoEnabled(false);

Удалить все:

getActionBar().setDisplayShowHomeEnabled(false);

Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн

9

Вы также можете добавить приведенный ниже код в AndroidManifest.xml .

android:icon="@android:color/transparent"

Это будет работать нормально.

Но я обнаружил, что это создает проблему, так как значок запуска также становится прозрачным.

Поэтому я использовал:

getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));

и это работало нормально.

Но если у вас есть несколько действий и вы хотите сделать значок на мероприятии прозрачным, тогда будет работать предыдущий подход.


2

Я использовал это, и это сработало для меня.

        getActionBar().setIcon(
        new ColorDrawable(getResources().getColor(android.R.color.transparent)));

Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн

2
getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
getActionBar().setDisplayHomeAsUpEnabled(true);

Добро пожаловать в переполнение стека! Обычно ответы, подобные вашим, считаются довольно низкого качества. Для дальнейшего использования вы должны добавить некоторые пояснения к предоставленному вами коду и лучше структурировать код (добавьте 4 пробела в начале каждой строки или выделите все это и щелкните символ {} над текстовым полем). Также, Вы должны уделять больше внимания дате вопроса (более года назад) и тому факту, что на него уже дан ответ (зеленый флажок). Удачи вам в программировании :)
Христо Валканов

Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн

1

Я думаю, что точный ответ: для API 11 или выше:

getActionBar().setDisplayShowHomeEnabled(false);

в противном случае:

getSupportActionBar().setDisplayShowHomeEnabled(false);

(потому что это нуждается в поддержке библиотеки.)


Ни в коем случае это не отвечает на вопрос. Я знал об этой функции, но я просил XML!
Храфн


0

Ответ Qiqi Abaziz в порядке, но я все еще долго пытался заставить его работать с пакетом совместимости и применять стиль к нужным элементам. Кроме того, взлом прозрачности не нужен. Итак, вот полный пример работы для v8 и выше:

значения \ styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyActivityTheme" parent="@style/Theme.AppCompat">
        <item name="actionBarStyle">@style/NoLogoActionBar</item> <!-- pre-v11-compatibility -->
        <item name="android:actionBarStyle">@style/NoLogoActionBar</item>
    </style>
    <style name="NoLogoActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="displayOptions">showHome</item> <!-- pre-v11-compatibility -->
        <item name="android:displayOptions">showHome</item>
    </style>
</resources>

AndroidManifest.xml (оболочка)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">   
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19"/>
    <application android:theme="@android:style/Theme.Light.NoTitleBar">
        <activity android:theme="@style/PentActivityTheme"/>
    </application>
</manifest>

0

Зайдите в манифест и найдите свою деятельность, затем добавьте этот код:

android:theme="@android:style/Theme.NoTitleBar"

выше линии скрыть Actionbar.

Если вам нужна другая функция, вы можете увидеть другие опции с помощью (CLR + SPC).


0

Самый быстрый способ - это изменить ваш Manifest.xml. Например, если вы хотите удалить логотип действия «Активность» и оставить логотип в других действиях, вы можете сделать следующее:

<activity
      android:name=".home.XActivity"
      android:logo="@android:color/transparent"
      android:configChanges="orientation|keyboardHidden" />
 <activity
      android:name=".home.HomeActivity"
      android:configChanges="orientation|keyboardHidden" />

0

Ничто из вышеперечисленного не сработало.

Но это добилось цели:

override fun onCreate() {
    setContentView(R.layout.activity_main)

    setSupportActionBar(toolbar)
    toolbar.logo = null

(убран значок с панели инструментов)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.