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

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

Кто-нибудь знает, как этого добиться? Желательно сделать это в XML.


person Hrafn    schedule 30.01.2013    source источник
comment
Вы могли просто прочитать руководство по API на панели действий. Об этом сказано прямо в руководстве.   -  person Mgamerz    schedule 30.01.2013
comment
Где-то можно найти любую информацию.   -  person Hrafn    schedule 31.01.2013
comment
вы можете показать нам, что вы пробовали? что вы обнаружили ранее, что не работает?   -  person DForck42    schedule 09.11.2016
comment
@ DForck42 Этот вопрос действительно больше не актуален (почти 4 года). Вы можете найти множество способов добиться этого в ответах ниже.   -  person Hrafn    schedule 10.11.2016


Ответы (17)


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

тема до версии 11

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

v11 и выше тема

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

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

person Charles Madere    schedule 10.04.2014
comment
Это работает, но в моем случае, когда у меня есть окно поиска, и я щелкаю по нему / расширяю его, значок / логотип моего приложения появляется снова. Любые идеи? - person acrespo; 07.07.2015
comment
@acrespo хм, я знаю, о чем вы говорите, но я не исследовал решение для этого, извините. - person Charles Madere; 08.07.2015
comment
В итоге я установил <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>. Эта последняя часть была важна, поскольку на некоторых устройствах (я думаю, в основном после леденца на палочке) проклятый searchview взял appIcon и поместил его вместо логотипа, даже если логотип был установлен как прозрачный: s - person acrespo; 08.07.2015

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

<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, и это прекрасно работает.

person Qiqi Abaziz    schedule 21.02.2013
comment
Довольно приятный трюк, спасибо! Он даже перестает занимать место на панели действий! - person Igor Čordaš; 02.07.2013
comment
Спасибо .. он работал и в коде ... actionBar.setIcon (android.R.color.transparent); - person Jagdeep Singh; 25.11.2013
comment
Отличный ответ ... :) - person Bytecode; 09.01.2014
comment
LOL'd на комментарии! Отличный и простой ответ. - person Ron; 27.02.2014
comment
На некоторых устройствах Samsung @android:color/transparent отображается как ЧЕРНЫЙ. Кажется сумасшествием, но многие производители устройств отменяют настройки Android по умолчанию; включая цвета. Из-за этого я бы создал цвет в файле colors.xml следующим образом: <color name="transparent">#00000000</color> и сослался бы на него вместо того, чтобы получать значение от Android. - person Matt W; 11.06.2014
comment
Просто интересно, почему и android:displayOptions, и displayOptions? Кроме того, они не связаны с решением, волшебство заключается в том, чтобы установить цвет значка на прозрачный. - person Jose_GD; 27.06.2014
comment
@jose_GD: android: displayOptions только версии v11 и выше, поэтому обе должны быть обратно совместимы. - person Nilzor; 01.08.2014
comment
getSupportActionBar (). setIcon (android.R.color.transparent) - person lytridic; 02.08.2014
comment
это работает, чтобы скрыть значок / заголовок ... но он все еще рисует фон (который можно скрыть с помощью ‹item name = android: background› @android: color / transparent ‹/item›) ... однако пробел / padding все еще присутствует, и мои действия не оправданы ... мысли о том, как это исправить? - person jesses.co.tt; 09.10.2014
comment
Размер 1x1 прозрачный .png? - person JohnyTex; 15.10.2014
comment
Это работает, но в моем случае, когда у меня есть окно поиска, и я щелкаю по нему / расширяю его, значок / логотип моего приложения появляется снова. Любые идеи? - person acrespo; 07.07.2015
comment
Это лучшее решение: ‹item name = android: icon› @null ‹/item› - person Baron; 05.10.2015

Если вам не нужен значок в конкретном действии.

getActionBar().setIcon(
   new ColorDrawable(getResources().getColor(android.R.color.transparent)));    
person Laksh    schedule 05.07.2013
comment
getActionBar (). setIcon (android.R.color.transparent); кажется достаточно - person Boy; 10.11.2013
comment
вызов метода getActionBar () .... является лучшим решением этой проблемы (удалить значок из панели действий), потому что если вы используете панель навигации и панель действий, ваша панель действий будет над панелью навигации. Если вы используете setDisplayShowHomeEnabled (false), тогда панель навигации будет над панелью действий, а вы этого не захотите. - person horkavlna; 30.03.2014
comment
Я бы изменил это на: ColorDrawable cd = new ColorDrawable(getResources().getColor(android.R.color.transparent)); cd.setBounds(0,0,0,0); getActionBar().setIcon(cd); Без установки границ прозрачный значок по-прежнему занимает место - person Aedis; 30.08.2014
comment
@Aedis: по-прежнему показывает пустое место слева от панели действий. какие-либо предложения? - person Rowan; 31.03.2015
comment
Это отлично работает, если вы не установили логотип. В моем случае мне пришлось использовать setLogo вместо setIcon метода. Тем не менее, отличный совет привел меня на правильный путь !! - person luiscosta; 05.02.2016
comment
Есть ли веская причина, по которой я не могу использовать getActionBar (). SetIcon (null); ? Похоже, у меня тоже получается. - person hellaandrew; 08.02.2016

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

getActionBar().setDisplayShowHomeEnabled(false);
person Brune    schedule 10.10.2013
comment
Это помещает панель действий под вкладки / панель навигации. По-видимому, такое поведение является преднамеренным ... code.google.com/p / android / issues / detail? id = 36191 - person Roger Keays; 09.06.2014
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015
comment
Кажется, это должен быть ответ - в противном случае вы применяете глобальное решение, которое, я сомневаюсь, всем нужно. В моем случае я хочу показать логотип на некоторых страницах, но на других страницах это не имеет смысла и загромождает панель действий. - person DiscDev; 21.07.2015

Звонок

mActionBar.setDisplayHomeAsUpEnabled(true);

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

mActionBar.setDisplayShowHomeEnabled(false);

скроет логотип, но отобразит значок «Дом как вверх». :)

person Atul O Holic    schedule 20.03.2014
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015
comment
@Hrafn - Я думал, что XML был предпочтительным ответом, а не ЕДИНСТВЕННЫМ ответом. :( Думаю, он все еще помогает людям. :) - person Atul O Holic; 31.05.2016

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

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

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

person Tevlon    schedule 11.12.2013

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

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

person dn_c    schedule 18.08.2015

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

getActionBar().setDisplayShowTitleEnabled(true);

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

getActionBar().setDisplayUseLogoEnabled(false);

Убрать все:

getActionBar().setDisplayShowHomeEnabled(false);
person Tiago Gouvêa    schedule 28.02.2015
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015

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

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

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

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

Итак, я использовал:

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

и все работало нормально.

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

person Sam    schedule 18.03.2015

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

        getActionBar().setIcon(
        new ColorDrawable(getResources().getColor(android.R.color.transparent)));
person user2900761    schedule 30.06.2014
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015

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

getActionBar().setDisplayShowHomeEnabled(false);

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

getSupportActionBar().setDisplayShowHomeEnabled(false);

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

person David    schedule 16.02.2015
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015

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

values ​​\ 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>
person Nilzor    schedule 01.08.2014

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

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

над строкой скрыть ваш Actionbar.

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

person A.A    schedule 25.09.2014

Самый быстрый способ - изменить ваш 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" />
person Jordi Alonso    schedule 28.03.2016

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

Но это помогло:

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

    setSupportActionBar(toolbar)
    toolbar.logo = null

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

person Dan Alboteanu    schedule 22.12.2018

person    schedule
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015

person    schedule
comment
Добро пожаловать в Stack overflow! Обычно ответы, похожие на ваш, считаются довольно некачественными. Для дальнейшего использования вам следует подумать о добавлении некоторых пояснений к предоставленному вами коду, и вам следует лучше структурировать код (добавьте 4 пробела в начало каждой строки или выделите все это и нажмите символ {} над текстовым полем). Вам следует уделять больше внимания дате вопроса (более года назад) и тому факту, что на него уже был дан ответ (зеленая галочка). Удачи в программировании :) - person Hristo Valkanov; 17.06.2014
comment
Во всяком случае, это не дает ответа на вопрос. Я знал об этой функции, но я просил XML! - person Hrafn; 31.03.2015