与Android 4.0一起使用Action Bar兼容版本

时间:2012-06-06 16:58:57

标签: android android-actionbar

我按照ActionBar compability version

中的代码进行操作

当我使用API​​级别10或更低的代码时,它会显示一个ActionBar,但当我将它用于API级别11或更高级别时,它不会显示徽标图标和操作项。

我检查了课程,我明白了:

ActionBarHelperBase:API级别10或更低。

ActionBarHelperHoneycomb:API等级11或更高。

ActionBarHelperICS:API级别14或更高。

修复ActionBar for Android 3.0或更高版本的最佳方法是什么?特别是Android 4.0

4 个答案:

答案 0 :(得分:2)

问题出在Manifest文件中。我应该从清单文件中删除android:theme="@style/Theme.ThemeCompabilityVersion

然后我需要在OnCreate()方法中检查代码中的版本,如:

private void setTheme() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) 
        setTheme(R.style.ThemeCompabilityVersion);
    else 
        setTheme(R.style.AppTheme);         
}

答案 1 :(得分:1)

有一个名为ActionBarSherlock的令人难以置信的项目允许使用API​​中的所有ActionBar功能而不是2.X

它将带您一个示例项目来理解和设置依赖项,它将解决您的许多问题:)只需调用getSupportActionBar()并且所有方法都可用。

我犯的一些常见错误是没有正确设置主题。

<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/bg_striped</item>
<item name="android:background">@drawable/bg_striped</item>

<item name="backgroundSplit">@drawable/bg_striped_split</item>
<item name="android:backgroundSplit">@drawable/bg_striped_split</item>

然后,您必须将该主题应用于将具有ActionBar支持的每个活动或应用程序标记。

<application android:icon="@drawable/icon" 
             android:label="@string/app_name" 
             android:name=".ApplicationClass"
             android:theme="@style/Theme.Styled">

您还可以设置包含栏上项目的menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_save"
      android:icon="@drawable/ic_launcher"
      android:title="TestMe"
      android:menuCategory="system"
      android:showAsAction="never" />
<item android:id="@+id/menu_launch"
      android:icon="@drawable/ic_launcher"
      android:title="Test2"
      android:menuCategory="secondary"
      android:showAsAction="never" />
<item android:id="@+id/menu_go"
      android:icon="@drawable/ic_launcher"
      android:title="Test"
      android:showAsAction="always|withText" />
</menu>

我学到的最有趣的事情是每个活动或片段都可以将其动作放在栏上,因此如果片段是可搜索的,则可以设置带放大镜图标的选项等。

在先前版本的片段中存在一些问题,在当前版本中似乎已经解决了,我可以使用一些示例代码来设置RoboGuice并在需要时提供片段支持。

希望它有所帮助, 问候。

答案 2 :(得分:0)

强烈推荐使用ActionbarSherlock,这是一个更加完整和高级的兼容性版本。如果在具有一个等的Android版本上运行,它使用本机操作栏。

actionbarsherlock.com

答案 3 :(得分:0)

您是否已将targetSdkVersion设为11或更高?您可以保留较低的minSdkVersion,例如:

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="15" />