【问题标题】:Android Action Bar not showing on displayOptions - useLogoAndroid 操作栏未显示在 displayOptions - useLogo
【发布时间】:2013-12-06 15:59:21
【问题描述】:

我在我的应用程序中为我的ActionBar 实现了一个actionBarStyle。下面是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 样式/主题几秒钟,然后是我的自定义主题(我猜你知道这个)。我不知道问题是什么。请帮忙。谢谢...

【问题讨论】:

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


    【解决方案1】:

    如果您在主题中设置了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>
    

    【讨论】:

      【解决方案2】:

      这适用于 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>
      

      【讨论】:

        【解决方案3】:

        如果你想使用代码来实现这个效果,你可以从一个片段中调用下面的代码。

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

        并且需要在AndroidManifest.xml中指定activity的logo属性,例如,

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

        【讨论】:

          猜你喜欢
          • 2015-05-09
          • 1970-01-01
          • 2014-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多