【问题标题】:ActionBar - Using a View as iconActionBar - 使用视图作为图标
【发布时间】:2026-01-18 18:25:02
【问题描述】:

所以,我想使用视图来代替操作栏中的应用程序图标。我不能使用简单的图像,因为视图会根据应用程序参数中选择的颜色集更改其颜色(我不想在 Photoshop 中创建四百张图像......)。

我知道我可以为操作栏使用自定义视图,它甚至非常简单,但问题是原始应用图像仍然显示。我也知道我可以通过将 setDisplayShowHomeEnabled 设置为 false 来隐藏它,但这也隐藏了我的导航抽屉的字形,这就是问题所在。

我还尝试创建自定义 Drawable 并覆盖 onDraw 方法,但没有显示任何内容,并且 Drawable 的高度/宽度为 1px。

【问题讨论】:

    标签: android android-actionbar icons actionbarsherlock


    【解决方案1】:

    要隐藏图标,您可以使用透明图标,编辑您用于操作栏的样式,如下所示:

       <style name="MyActionBarStyle" parent="@style/Widget.Sherlock.Light.ActionBar">
         <item name="icon">@android:color/transparent</item> 
       </style>
    

    假设您在主题中为您的操作栏使用名为 MyActionBarStyle 的样式。

    <style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light">
         <item name="actionBarStyle">@style/MyActionBarStyle</item>
    </style>
    

    【讨论】:

    • 隐藏图标有效,但图像使用的空间仍然存在,因此我的视图无法在栏的最左侧对齐。
    • 您是否考虑过隐藏徽标和导航字形并使用图像按钮之类的东西在自定义视图中复制导航功能?
    • 我正在使用 NavigationDrawer,因此很难模仿原始行为(尤其是打开/关闭期间的图像翻译)。我宁愿找到用 View 替换图像的解决方案我可以覆盖 onDraw 方法,因为如果我在操作栏中使用自定义视图,用户甚至无法触摸图像或标题来打开抽屉或向上.
    • 我看到 ActionBarSherlock 使用 id @id/abs__home 作为图像。您可能可以通过其 id 获取 imageView 并将其隐藏。另一种方法可能是自定义 ActionBarSherlock 库以隐藏它。例如,通过编辑 res/layout/abs__action_bar_home.xml 并将 ImageView 的可见性更改为 Gone。
    • ABS 在运行高 API 级别的设备上使用真正的 ActionBar,因此无法正常工作。