Android操作栏在displayOptions上没有显示 - 使用Logo

3

我在我的应用程序中实现了一个 actionBarStyle,用于我的 ActionBar。以下是 xml 代码:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="MyActionBarTheme" parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:actionBarStyle">@style/MyCustomActionBar</item>
    </style>
    <style name="MyCustomActionBar" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:backgroundSplit">@android:color/transparent</item>
        <item name="android:displayOptions">useLogo</item>
    </style>

以下是我的Activity OnCreate代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActionBar().setLogo(R.drawable.ic_logo);
    setContentView(R.layout.activity_home);

    initializeViews();
    manageFragments();
}

问题是我的ActionBar根本没有显示,当我从XML中删除displayOptions项时,它会显示标题。现在我总是可以删除标题(将标题字符串设置为空),但我不想这样做,因为它会显示几秒钟的默认ActionBar样式/主题,然后是我的自定义主题(我猜您知道这个)。我不知道问题出在哪里,请帮忙解决。谢谢...
3个回答

7

如果您在主题中设置了android:logo,则不需要在代码中设置它。

我认为您可能还需要在显示选项中添加showHome,例如:

<item name="android:displayOptions">showHome|useLogo</item>

编辑

下面是一个示例主题,我用它来隐藏徽标并在操作栏中显示标题,这个示例使用了ActionBarSherlock,如果你没有使用它,你需要相应地调整父样式名称。

<style name="AppTheme" parent="style/Theme.Sherlock.Light.DarkActionBar">
   <item name="android:windowBackground">@color/background_primary</item>
   <item name="android:icon">@drawable/appicon</item>    
   <!-- For the home as up icon on sub pages -->
   <item name="android:homeAsUpIndicator">@drawable/back</item>
   <item name="homeAsUpIndicator">@drawable/back</item>          
   <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>
   <item name="actionBarStyle">@style/AppTheme.ActionBar</item>
</style>

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

<item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
<item name="titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>    
<item name="android:background">@color/actionbar_bg_color</item>
<item name="background">@color/actionbar_bg_color</item>
<item name="android:backgroundStacked">@color/actionbar_bg_color</item>
<item name="backgroundStacked">@color/actionbar_bg_color</item>


1
这段代码适用于4.2版本及以上的API。
在您的ActionBar样式中添加以下内容...
<item name="android:displayOptions">showHome|useLogo</item>
<item name="displayOptions">showHome|useLogo</item>

<!-- Support library compatibility -->
<item name="android:logo">@drawable/ic_home</item>
<item name="logo">@drawable/ic_home</item>

完整示例,为您的完整应用程序添加新主题。

<!-- This is the generated app theme -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>

    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<!-- general styles for the action bar -->
<style name="MyActionBar"
    parent="@style/Widget.AppCompat.ActionBar">

    <item name="android:displayOptions">showHome|useLogo</item>
    <!-- Support library compatibility -->
    <item name="displayOptions">showHome|useLogo</item>

    <item name="android:logo">@drawable/ic_home</item>
     <!-- Support library compatibility -->
    <item name="logo">@drawable/ic_home</item>
</style>

0
如果你想使用代码实现这个效果,你可以从一个Fragment中调用下面的代码。
ActionBarActivity activity = (ActionBarActivity) getActivity();
activity.getActionBar().setDisplayUseLogoEnabled(true);
activity.getActionBar().setDisplayShowHomeEnabled(true);

你需要在 AndroidManifest.xml 文件中指定活动的 logo 属性,例如,

    <activity
        android:name=".....MainEntryActivity"
        android:label="@string/label_main"
        android:screenOrientation="portrait"
        android:logo="@drawable/ic_ios_logo"
        android:theme="@style/AppCompatTheme" >
    </activity>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接