【问题标题】:How can I have a drop shadow on my ActionBar (ActionBarSherlock)?如何在我的 ActionBar (ActionBarSherlock) 上放置阴影?
【发布时间】:2012-07-12 09:20:12
【问题描述】:

我包含了我的样式化 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>

互联网上的一些搜索建议使用设置为@null 的windowContentOverlay。但是当我在样式 xml 中使用它时,它不会改变任何东西。任何人都可以帮助做什么?

【问题讨论】:

    标签: android actionbarsherlock android-theme


    【解决方案1】:

    如果您想在 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 上的窗口顶部创建阴影(尽管 ActionBar 自 Android 3.0 起就存在于 api 中,但 ActionBarSherlock 对所有早于 Android 4.0 的 Android 版本使用自定义实现)。

    要在 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 之前的版本),Android 4.0 及更高版本使用 ActionBar 版本。

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

    【讨论】:

      【解决方案2】:

      正如之前的回答所说,在应用程序主题中使用“windowContentOverlay”而不是操作栏样式。

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

      如果你想要一个逼真的阴影,你可以在 “你的安卓文件夹”/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>
      

      【讨论】:

      • Android 9 补丁图像不太美观,我最终使用了我的。谢谢:)
      【解决方案3】:

      另外,API21(Lollipop)以上,你在代码中也需要这个。

      getSupportActionBar().setElevation(0);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 2019-08-15
        相关资源
        最近更新 更多