Android操作栏未在displayOptions上显示 - useLogo

时间:2013-12-06 15:59:21

标签: android android-actionbar android-theme android-styles graphical-logo

我已经在我的应用中为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根本没有显示,当我从My XML中删除displayOptions项时。它显示标题。现在我可以随时删除标题(将标题字符串设置为空白)但我不希望这样,因为它显示默认的ActionBar样式/主题几秒钟然后我的自定义主题(我猜你知道)这个)。我不知道问题是什么。请帮忙。谢谢......

3 个答案:

答案 0 :(得分:6)

如果您在主题中设置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 :(得分: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>

答案 2 :(得分:0)

如果您想使用代码来实现此效果,可以从片段中调用以下代码。

ActionBarActivity activity = (ActionBarActivity) getActivity();
activity.getActionBar().setDisplayUseLogoEnabled(true);
activity.getActionBar().setDisplayShowHomeEnabled(true);

您需要在AndroidManifest.xml中指定活动的徽标属性,例如

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