【问题标题】:Remove icon/logo from action bar on android从 android 上的操作栏中删除图标/徽标
【发布时间】:2013-01-14 09:41:47
【问题描述】:

我一直在尝试找到某种方法从操作栏中删除图标/徽标,但在搜索 SO、Android 的文档和 Google 一个小时后,我发现的唯一一件事是如何完全删除标题栏.那不是我想要的。只想从标题栏中删除图标/徽标。

任何人都知道如何做到这一点?最好我想在 XML 中执行此操作。

【问题讨论】:

  • 您可能已经阅读了操作栏上的 API 指南。它在指南中说得对。
  • 每条信息都可以在某个地方找到。
  • 你能告诉我们你的尝试吗?你以前发现了什么不起作用?
  • @DForck42 这个问题真的不再相关了(差不多 4 岁)。您可以在下面的答案中找到很多实现这一目标的方法。

标签: android xml android-layout android-actionbar titlebar


【解决方案1】:

在您的操作栏样式中添加以下代码:

<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,效果很好。

【讨论】:

  • 不错的技巧,谢谢!它甚至不再占用操作栏中的空间!
  • 谢谢..它也可以在代码中工作... actionBar.setIcon(android.R.color.transparent);
  • 优秀的答案...:)
  • 某些三星设备将@android:color/transparent 显示为黑色。看起来很疯狂,但许多设备制造商会覆盖 Android 的默认设置;包括颜色。因此,我会在 colors.xml 中像这样创建一个颜色:&lt;color name="transparent"&gt;#00000000&lt;/color&gt; 并引用它而不是从 Android 获取值。
  • @jose_GD: android:displayOptions 仅适用于 v11 及更高版本,因此您需要两者都向后兼容。
【解决方案2】:

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

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

【讨论】:

  • 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); 不设置边界,透明图标仍然占用空间
  • @Aedis :操作栏左侧仍显示空白区域。有什么建议吗?
  • 如果您没有设置徽标,这可以正常工作。就我而言,我不得不使用 setLogo 而不是 setIcon 方法。不过,很好的提示,让我走上了正确的道路!
【解决方案3】:

如果你在AndroidManifest.xml&lt;application&gt;标签中定义了android:logo="...",那么你需要用这个东西来隐藏图标:

v11 之前的主题

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

v11 及以上主题

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

这两种样式的使用正确地隐藏了我在 2.3 和 4.4 设备上的操作栏图标(此应用使用 AppCompat)。

【讨论】:

  • 这可行,但在我的情况下,当我有一个搜索视图并单击它/展开它时,我的应用程序图标/徽标会重新出现。有什么想法吗?
  • @acrespo 嗯我知道你在说什么,但我还没有研究过解决方案,抱歉。
  • 我最终做的是在我的AndroidManifest.xml 中设置&lt;application (...) android:logo="@android:color/transparent"&gt; (...),并以我的风格强制useLogodisplayOptions,就像这样&lt;item name="android:displayOptions"&gt;showHome|useLogo|homeAsUp|showTitle&lt;/item&gt; &lt;item name="displayOptions"&gt;showHome|useLogo|homeAsUp|showTitle&lt;/item&gt;。最后一部分很重要,因为在某些设备(我认为主要是棒棒糖后)中,该死的搜索视图会使用 appIcon 并将其放在徽标的位置,即使徽标设置为透明:s
【解决方案4】:

这对我有用

getActionBar().setDisplayShowHomeEnabled(false);

【讨论】:

  • 这会将操作栏置于选项卡/导航栏下方。显然这种行为是“设计使然”...code.google.com/p/android/issues/detail?id=36191
  • 无论如何这都不能回答这个问题。我知道这个功能,但我要的是 XML!
  • 这似乎应该是答案 - 否则你正在应用一个全局解决方案,我怀疑这是每个人都想要的。在我的情况下,我想在某些页面上显示徽标,但在其他页面上它没有意义并且使操作栏变得混乱。
【解决方案5】:

打电话

mActionBar.setDisplayHomeAsUpEnabled(true);

此外,

mActionBar.setDisplayShowHomeEnabled(false);

将隐藏徽标但显示 Home As Up 图标。 :)

【讨论】:

  • 无论如何这都不能回答这个问题。我知道这个功能,但我要的是 XML!
  • @Hrafn - 我认为 XML 是首选答案,而不是唯一答案。 :(我想它仍然在帮助人们。:)
【解决方案6】:

请注意:

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

还将使您的选项项目透明。

【讨论】:

    【解决方案7】:
        //disable application icon from ActionBar
        getActionBar().setDisplayShowHomeEnabled(false);
    
        //disable application name from ActionBar
        getActionBar().setDisplayShowTitleEnabled(false);
    

    【讨论】:

    • 无论如何这都不能回答这个问题。我知道这个功能,但我要的是 XML!
    【解决方案8】:
    getActionBar().setIcon(android.R.color.transparent);
    

    这对我有用。

    【讨论】:

      【解决方案9】:

      删除或显示标题使用:

      getActionBar().setDisplayShowTitleEnabled(true);
      

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

      getActionBar().setDisplayUseLogoEnabled(false);
      

      全部删除:

      getActionBar().setDisplayShowHomeEnabled(false);
      

      【讨论】:

      • 无论如何这都不能回答这个问题。我知道这个功能,但我要求的是 XML!
      【解决方案10】:

      您也可以在 AndroidManifest.xml 中添加以下代码。

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

      它会正常工作的。

      但我发现这会带来问题,因为启动器图标也会变得透明。

      所以我用了:

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

      效果很好。

      但是,如果您有多个活动,并且希望使活动上的图标透明,那么前一种方法将起作用。

      【讨论】:

        【解决方案11】:

        我用过这个,它对我有用。

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

        【讨论】:

        • 无论如何这都不能回答这个问题。我知道这个功能,但我要求的是 XML!
        【解决方案12】:
        getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
        getActionBar().setDisplayHomeAsUpEnabled(true);
        

        【讨论】:

        • 欢迎来到堆栈溢出!通常,与您类似的答案被认为质量很低。为了将来参考,您应该考虑添加一些关于您提供的代码的解释,并且您应该更好地构建代码(在每行的开头添加 4 个空格,或者将其全部选中并单击文本框上方的 {} 符号。)另外,您应该更加注意问题的日期(一年多以前)以及它已经被回答的事实(绿色复选标志)。祝你编程好运:)
        • 无论如何这都不能回答这个问题。我知道这个功能,但我要求的是 XML!
        【解决方案13】:

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

        getActionBar().setDisplayShowHomeEnabled(false);
        

        否则:

        getSupportActionBar().setDisplayShowHomeEnabled(false);
        

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

        【讨论】:

        • 无论如何这都不能回答这个问题。我知道这个功能,但我要求的是 XML!
        【解决方案14】:

        转到您的清单并找到应用程序标签

          android:icon="@android:color/transparent"// simply add this on place of your icon
        

        ...... ... ...

        【讨论】:

          【解决方案15】:

          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>
          

          【讨论】:

            【解决方案16】:

            进入您的清单并找到您的活动,然后添加以下代码:

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

            在上面隐藏你的Actionbar

            如果您需要其他功能,可以使用 (CLR + SPC) 查看其他选项。

            【讨论】:

              【解决方案17】:

              最快的方法是修改你的 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" />
              

              【讨论】:

                【解决方案18】:

                以上都不起作用。

                但这成功了:

                override fun onCreate() {
                    setContentView(R.layout.activity_main)
                
                    setSupportActionBar(toolbar)
                    toolbar.logo = null
                

                (从工具栏中删除图标)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-08
                  • 1970-01-01
                  • 2015-05-10
                  • 2016-09-24
                  相关资源
                  最近更新 更多