在 XML 中为 ActionBar 定义自定义徽标(不同于徽标)?

Posted

技术标签:

【中文标题】在 XML 中为 ActionBar 定义自定义徽标(不同于徽标)?【英文标题】:Define custom Logo for ActionBar (different than Logo) in XML? 【发布时间】:2012-02-02 10:37:49 【问题描述】:

我想为我的应用制作一个 Actionbar_style.xml,并且我想使用一个不同于我的应用徽标/图标的徽标。

如何以编程方式更改它很清楚:Change logo that appears in android ActionBar programatically 但是像这样我需要将其编码到每个活动中。

是否已经有 xml 标签可以在 xml 中定义自定义 Actionbarlogo?

我的 Customstyles.xml

<style name="CustomActionBar0" parent="android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">@drawable/action_bg0</item>
</style>

android styles.xml 好像没有...

<style name="Widget.ActionBar">
    <item name="android:background">@android:drawable/action_bar_background</item>
    <item name="android:displayOptions">useLogo|showHome|showTitle</item>
    <item name="android:divider">@android:drawable/action_bar_divider</item>
    <item name="android:height">?android:attr/actionBarSize</item>
    <item name="android:paddingLeft">0dip</item>
    <item name="android:paddingTop">0dip</item>
    <item name="android:paddingRight">0dip</item>
    <item name="android:paddingBottom">0dip</item>
    <item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Title</item>
    <item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Subtitle</item>
    <item name="android:progressBarStyle">@android:style/Widget.ProgressBar.Horizontal</item>
    <item name="android:indeterminateProgressStyle">@android:style/Widget.ProgressBar.Small</item>
    <item name="android:homeLayout">@android:layout/action_bar_home</item>
</style>

【问题讨论】:

【参考方案1】:

只需为 android:icon 属性设置一个值

<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/AppTheme.ActionBarStyle</item>
</style>

<style name="AppTheme.ActionBarStyle" parent="android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@drawable/actionbar_background</item>
        <item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
        <item name="android:icon">@drawable/ic_home</item>
        <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item>
</style>

【讨论】:

【参考方案2】:

您无需在样式 XML 中设置徽标样式,只需在 Manifest 中使用 android:logo,然后使用 setDisplayUseLogoEnabled()ActionBar 中设置它。这是来自 Google 的一个项目,它向您展示了如何在两者之间切换。 http://code.google.com/p/styled-action-bar/

【讨论】:

否,已应用操作栏的样式,正在更改操作栏的背景。我想要的是通过 XML 声明更改主页徽标。以编程方式,我可以使用 Actionbar.setLogo() 来做到这一点。但我不知道如何通过 XML 来做到这一点。 @KarlKarlsom 我更新了我原来的帖子,很抱歉造成混乱。 但 android:logo 也用于其他药水(例如在 4.0 中的任务图标)。但是在操作栏中,我想要一个不适合作为徽标的图形。 要显示徽标而不是图标,请使用:&lt;item name="android:displayOptions"&gt;useLogo&lt;/item&gt;【参考方案3】:

听起来您需要为操作栏使用自定义布局,这样您就可以为徽标图像定义任何您想要的内容。

操作栏/ActionbarSherlock 风格

    <style name="ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
  <item name="displayOptions">showCustom</item>
  <item name="android:displayOptions">showCustom</item>

   <item name="customNavigationLayout">@layout/action_bar_home_icon_default</item>
   <item name="android:customNavigationLayout">@layout/action_bar_home_icon_default</item>
  </style>

@layout/action_bar_home_icon_default 是您的自定义布局,带有您的自定义徽标

【讨论】:

【参考方案4】:

是的。您可以为不同的活动设置不同的标志。这是清单文件中的示例代码。

<activity
   android:name="MyActivity"
   ***android:icon="@drawable/logo"***            
   android:label="@string/app_name"
   android:configChanges="orientation"           
   android:screenOrientation="portrait" />

希望对您有所帮助。干杯!

【讨论】:

以上是关于在 XML 中为 ActionBar 定义自定义徽标(不同于徽标)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ActionBar 中显示自定义视图?

xml Android示例,说明如何向ActionBar添加自定义徽标并确保最佳匹配启动Window。

如何在 Xamarin ActionBar 标题中设置自定义字体系列?

Android ActionBar 自定义布局样式

自定义控件

Tableau server自定义服务器名称和更改图徽