从Android的操作栏中删除图标/徽标


146

我一直在尝试找到从操作栏中删除图标/徽标的方法,但是经过一个小时的搜索之后,我唯一发现的内容是,如何从Android的文档和Google中整体删除标题栏。那不是我想要的。只想从标题栏中删除图标/徽标。

有人知道如何做到这一点吗?最好是我想用XML做到这一点。


1
您可能已经阅读了操作栏上的API指南。它在指南中说得很对。
Mgamerz 2013年

6
每条信息都可以找到。
Hrafn

您能告诉我们您尝试了什么吗?您先前发现的无效的内容?
DForck42 '16

@ DForck42这个问题真的不再相关了(将近4岁)。您可以在下面的答案中找到许多实现此目标的方法。
赫本

Answers:


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,2015年

@acrespo嗯,我知道您在说什么,但抱歉,我尚未研究解决方案。
Charles Madere

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>。最后一部分很重要,因为在某些设备(我认为主要是棒棒糖发布之后)中,该死的searchview将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
很好,谢谢!它甚至停止占用动作栏中的空间!
IgorČordaš13年

6
谢谢..它还可以在代码中工作... actionBar.setIcon(android.R.color.transparent);
Jagdeep Singh 2013年

1
极好的答案... :)
字节码

24
某些三星设备显示@android:color/transparent为黑色。似乎很疯狂,但是许多设备制造商都覆盖了Android的默认设置;包括颜色。因此,我将像这样在colors.xml中创建颜色:<color name="transparent">#00000000</color>并引用该颜色,而不是从Android获取值。
马特W

1
@jose_GD:android:displayOptions仅限v11及更高版本,因此您需要两者都向后兼容。
Nilzor 2014年

115

如果您不想在特定活动中使用该图标。

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

45
getActionBar()。setIcon(android.R.color.transparent); 似乎足够了
Boy

调用方法getActionBar()....可以更好地解决此问题(从操作栏删除图标),因为如果您使用导航栏和操作栏,那么您的操作栏将位于导航栏上方。如果使用setDisplayShowHomeEnabled(false),则导航栏将位于操作栏上方,并且您不希望这样做。
horkavlna 2014年

我将其更改为: ColorDrawable cd = new ColorDrawable(getResources().getColor(android.R.color.transparent)); cd.setBounds(0,0,0,0); getActionBar().setIcon(cd); 不设置边界,透明图标仍然使用空间
艾迪石

1
@Aedis:操作栏左侧仍显示空白区域。有什么建议?
罗文

如果您尚未设置徽标,则此方法效果很好。就我而言,我不得不使用setLogo代替setIcon方法。尽管如此,很棒的提示,还是让我走上了正确的路!!
luiscosta 2016年

49

这对我有用

getActionBar().setDisplayShowHomeEnabled(false);

2
这会将操作栏置于选项卡/导航栏下方。显然,这种行为是“设计使然
Roger Keays 2014年

无论如何,这并不能回答问题。我知道此功能,但是我要的是XML!
Hrafn

这似乎应该是答案-否则您将应用全局解决方案,我怀疑这是每个人都想要的。就我而言,我想在某些页面上显示徽标,但是在其他页面上则没有意义,并且会使操作栏混乱。
DiscDev

28

呼唤

mActionBar.setDisplayHomeAsUpEnabled(true);

此外,

mActionBar.setDisplayShowHomeEnabled(false);

将隐藏徽标,但显示“首页另存为”图标。:)


无论如何,这并不能回答问题。我知道此功能,但是我要的是XML!
Hrafn

@Hrafn-我认为XML是首选答案,而不是唯一答案。:(我猜它还是帮助人们:)。
阿图尔Ø狂热

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!
Hrafn

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

这对我有用。


11

使用以下方法删除或显示标题:

getActionBar().setDisplayShowTitleEnabled(true);

使用以下方法删除或显示徽标:

getActionBar().setDisplayUseLogoEnabled(false);

移除所有:

getActionBar().setDisplayShowHomeEnabled(false);

无论如何,这并不能回答问题。我知道此功能,但是我要的是XML!
Hrafn)

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!
Hrafn)

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

欢迎使用Stack溢出!通常,与您类似的答案被认为是较低质量的。为了将来参考,您应该考虑添加一些有关您提供的代码的说明,并且应该使代码的结构更好(在每行的开头添加4个空格,或者全部选中并单击文本框上方的{}符号。)您应该更加注意问题的日期(一年多以前)和已经回答的事实(绿色复选标记)。祝您编程
愉快

无论如何,这并不能回答问题。我知道此功能,但是我要的是XML!
Hrafn)

1

我认为确切的答案是:对于api 11或更高版本:

getActionBar().setDisplayShowHomeEnabled(false);

除此以外:

getSupportActionBar().setDisplayShowHomeEnabled(false);

(因为它需要一个支持库。)


无论如何,这并不能回答问题。我知道此功能,但是我要的是XML!
Hrafn)


0

齐齐·阿巴齐兹(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(shell)

<?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”的徽标,并将徽标保留在其他活动中,则可以执行以下操作:

<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

(已从工具栏中删除图标)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.