如何在ActionBar(ActionBarSherlock)上设置投影?

时间:2012-07-12 09:20:13

标签: android actionbarsherlock android-theme

我包含我的样式化xml布局:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Styled" parent="Theme.Sherlock">
        <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item>
        <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item>

    </style>

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
        <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
        <item name="background">@color/red</item>
        <item name="android:background">@color/red</item>
        <item name="windowContentOverlay">@null</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

    <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
        <item name="android:textSize">21sp</item>
    </style>

</resources>

通过互联网进行的一些搜索建议使用windowContentOverlay设置为@null。但是当我在xml风格中使用它时,它不会改变任何东西。任何人都可以帮忙做什么吗?

3 个答案:

答案 0 :(得分:30)

如果要在ActionBar下面创建阴影,则必须在应用程序主题上设置android:windowContentOverlay参数(在代码中,您在ActionBar样式上错误地设置了它)。

在你的例子中,它将是:

<style name="Theme.Styled" parent="Theme.Sherlock">
        ...
        <item name="android:windowContentOverlay">@drawable/my_actionbar_shadow</item>
</style>

使用@null值可删除阴影。

这一行在Android 3.0及更新版本的ActionBar上设置阴影。但是,如果您使用的是ActionBarSherlock,它将无法正常工作。它将在运行早于Android 4.0的系统的Android设备上的ActionBarSherlock上创建窗口顶部的阴影(尽管自Android 3.0以来ActionBar存在于api中,ActionBarSherlock使用早于Android 4.0的所有Android版本的自定义实现)。 p>

要在ActionBarSherlock下面创建阴影,您必须在应用程序主题上设置windowContentOverlay参数(注意缺少的android:)。

<style name="Theme.Styled" parent="Theme.Sherlock">
        ...
        <item name="windowContentOverlay">@drawable/my_actionbar_shadow</item>
</style>

再次,使用@null删除阴影。

虽然此行适用于ActionBarSherlock,但它不适用于运行Android 4.0及更高版本的Android设备,在此类设备上的ActionBar下不会创建阴影。那么如何组合这两个参数以在ActionBar和ActionBarSherlock下获得所需的阴影?

在您的案例中使用resource configuration qualifiers使用平台版本限定符。 在res/values/styles.xml中使用第二个xml代码。并在res/values-v14/styles.xml中使用第一个xml代码。因此,默认情况下使用ActionBarSherlock版本(对于Android 4.0之前的版本),ActionBar版本用于Android 4.0及更高版本。

修改 Android 4.3(API级别18)中有bugandroid:windowContentOverlay不起作用。它应该在将来的版本中修复。如果您需要在Android 4.3中修复它,您可以找到错误报告中链接的解决方法。

答案 1 :(得分:5)

如前一个答案所说,在应用主题中使用“windowContentOverlay”而不是操作栏样式。

<style name="Theme.Styled" parent="Theme.Sherlock">
        ...
        <item name="windowContentOverlay">@drawable/my_actionbar_shadow</item>
</style>

如果你想要一个真实的阴影,你可以找到一个 “你的Android文件夹”/ platforms / android-16 / data / res / drawable-hdpi /

ab_solid_shadow_holo.9.png并将其复制到您的drawable-hdpi文件夹,然后最终结果是

<style name="Theme.Styled" parent="Theme.Sherlock">
        ...
        <item name="windowContentOverlay">@drawable/ab_solid_shadow_holo</item>
</style>

答案 2 :(得分:3)

此外,在API21(Lollipop)上面,您也需要在代码中使用它。

getSupportActionBar().setElevation(0);