0

我遵循了ActionBar 兼容版本中的代码

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

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

ActionBarHelperBase :API 级别 10 或更低。

ActionBarHelperHoneycomb :API 级别 11 或更高。

ActionBarHelperICS :API 级别 14 或更高。

修复适用于 Android 3.0 或更高版本的 ActionBar 的最佳方法是什么?特别是安卓4.0

4

4 回答 4

2

问题出在清单文件中。我应该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);         
}
于 2012-06-08T00:36:19.993 回答
1

有一个名为ActionBarSherlock的令人难以置信的项目,它允许在 2.X 以上的 API 中使用所有 ActionBar 功能

它会带你一个示例项目来理解和设置依赖关系,它会解决你的很多问题:) 只需调用 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,其中包含 Bar 上的项目:

<?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和片段支持设置一些示例代码。

希望它有所帮助,问候。

于 2012-06-06T17:06:22.757 回答
0

你有设置你targetSdkVersion11或更高的吗?您可以保持较低minSdkVersion的 ,例如:

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="15" />
于 2012-06-06T19:00:24.663 回答
0

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

actionbarsherlock.com

于 2012-06-06T17:05:08.633 回答