【问题标题】:Remove shadow below actionbar删除操作栏下方的阴影
【发布时间】:2012-08-28 02:29:47
【问题描述】:

我使用 actionbarsherlock。下面的一段代码负责将其背景更改为自定义背景。

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="background">@drawable/actionbar_bg</item>
    <item name="android:background">@drawable/actionbar_bg</item>
    <...>  
</style>

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

它适用于 actionbarsherlock(在蜂窝以下的版本上)。但是在 ICS 中,我在操作栏下方有一个我不想要的阴影。 让它消失的样式项是什么?

【问题讨论】:

    标签: android android-actionbar actionbarsherlock


    【解决方案1】:

    让它消失的样式项是什么?

    要移除阴影,请将其添加到您的应用主题中:

    <style name="MyAppTheme" parent="android:Theme.Holo.Light">
        <item name="android:windowContentOverlay">@null</item>
    </style>
    

    更新: 正如@Quinny898 所说,在 Android 5.0 上这已经改变,你必须在你的操作栏上调用 setElevation(0)。请注意,如果您使用的是支持库,则必须像这样调用它:

    getSupportActionBar().setElevation(0);
    

    【讨论】:

    • 从状态栏而不是操作栏下方移除阴影不是一种样式吗?
    • 谢谢,它消失了。需要注意的重要一点是,这行代码应该出现在应用主题中,而不是操作栏样式中。
    • 我工作!需要明确的是,这行代码应该加在App Theme Tag中,而不是ActionBar Theme标签中。
    • 对于棒棒糖之前的设备getSupportActionBar().setElevation(0); 不起作用。因此,您已将&lt;item name="android:windowContentOverlay"&gt;@null&lt;/item&gt; 放入您的应用程序主题中。我有类似的问题。现在我两个都有了。 setElevation from 并在应用程序主题中添加了 windowContentOverlay 项。 setElevation 适用于 android 5.0 及更高版本,而其他适用于 pre-lollipop。干杯!
    • 需要注意的是,在使用getSupportActionBar().setElevation(0); 时,您必须在setContentView() 之前调用它才能使其工作。
    【解决方案2】:

    对于 Android 5.0,如果您想直接将其设置为样式,请使用:

    <item name="android:elevation">0dp</item>
    

    为了支持库的兼容性使用:

    <item name="elevation">0dp</item>
    

    AppCompat 轻主题的样式示例:

    <style name="Theme.MyApp.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <!-- remove shadow below action bar -->
        <!-- <item name="android:elevation">0dp</item> -->
        <!-- Support library compatibility -->
        <item name="elevation">0dp</item>
    </style>
    

    然后将此自定义 ActionBar 样式应用于您的应用主题:

    <style name="Theme.MyApp" parent="Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
    </style>
    

    对于 5.0 之前的 Android,也将其添加到您的应用主题中:

    <!-- Remove shadow below action bar Android < 5.0 -->
    <item name="android:windowContentOverlay">@null</item>
    

    【讨论】:

    • 不适用于 5.0 之前的设备。问题是,我将windowContentOverlay 添加到操作栏主题,而不是应用主题。
    • 我很抱歉,但我试图做相反的事情,使高程阴影实际出现在棒棒糖之前的设备上(我已经设法使用 android:elevation 为棒棒糖设备做到了)。使用这种方法,我无法做到这一点。我相信这将是相当直接的。为海拔属性设置一个非零值,就是这样。
    • 如果你不触摸 android:windowContentOverlay 属性,它应该默认可见,也许检查你使用的主题是否正确......我认为你需要使用 AppCompat 主题。
    • 但是如何处理 pre lollipop API 上的android:windowContentOverlay?如果我的 minSDK 是 pre lollipop 但目标是 21,我无法编译?
    • 这有效,但仅当我在 parent 属性中使用 &lt;style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse"&gt; 而没有 style/ 时。
    【解决方案3】:

    在 Android 5.0 上,这已更改,您必须在操作栏上调用 setElevation(0)。请注意,如果您使用的是支持库,则必须像这样调用它:

    getSupportActionBar().setElevation(0);
    

    不受 windowContentOverlay 样式项的影响,因此无需更改样式

    【讨论】:

    • 您是否必须对每个活动都这样做,或者是否有一种快速的方法可以将其应用于所有活动?我现在将添加我所有的活动。谢谢!
    • 就像任何其他操作栏方法(例如标题)一样,我会说每个活动
    • 真可惜。在styles.xml 文件中设置这样的参数会很好。也许这会在未来的更新中出现
    • 这不适用于低于 5.0 的版本。支持操作栏不应该与所有以前的设备兼容吗?
    • 这里与@splinter123 相同 :( 想知道在使用 AppCompat 时如何去除 pre-Lollipop 上的阴影。
    【解决方案4】:

    在 AppBarLayout 中添加 app:elevation="0dp" 以在应用栏中隐藏阴影

    【讨论】:

    • 看看大家,只要应用这个解决方案,忘记其他人所说的话。谢啦!有用!非常简单的解决方案!
    • 这样使用:
    • @MarcoFerrari 在 AppBarLayout 的情况下使用它作为 'getSupportActionBar().setElevation(0);'不起作用。
    【解决方案5】:

    如果您正在使用 ActionBarSherlock

    在你的主题中添加这个:

    <style name="MyTheme" parent="Theme.Sherlock">
        ....
        <item name="windowContentOverlay">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        ....
    </style>
    

    【讨论】:

    • 这是一个更好的答案,它指定了兼容性项
    【解决方案6】:

    你必须在android.support.design.widget.AppBarLayout中设置app:elevation="0dp",然后它才能工作。

    <android.support.design.widget.AppBarLayout
        app:elevation="0dp"... >
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@android:color/transparent"
            app:popupTheme="@style/AppTheme.PopupOverlay" >
    
    
        </android.support.v7.widget.Toolbar>
    
    </android.support.design.widget.AppBarLayout>
    

    【讨论】:

    • 这导致 AppBar 的阴影无处不在 - 我如何以编程方式控制它?
    【解决方案7】:
    app:elevation="0dp" 
    

    但不是

    android:elevation="0dp"
    

    在 android L 上为我工作

    【讨论】:

      【解决方案8】:

      我也有同样的问题,我已经成功解决了这个问题。您所要做的就是在要删除高程的那个活动中将高程更改为 0 浮点值。

      如果您想在名为MyActivity.java 的活动中更改它,那么您必须先获取ActionBar

      首先导入ActionBar

      import android.support.v7.app.ActionBar;
      

      导入后你必须初始化一个action bar的变量并将它的高度设置为0。

       private ActionBar toolbar;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
          .
          .
          toolbar=getSupportActionBar();
          toolbar.setElevation(0);
          .
          .
          }
      

      【讨论】:

        【解决方案9】:

        Kotlin 解决方案(Android 3.3、Kotlin 1.3.20)

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            supportActionBar!!.elevation = 0f
        }
        

        【讨论】:

        • 不知道为什么这被否决(我是 Kotlin 的新手),但这对我有用,而其他人没有
        【解决方案10】:

        对于 Xamarin 开发人员,请使用:SupportActionBar.Elevation = 0; 用于 AppCompatActivityActionBar.Elevation = 0; 用于非兼容活动

        【讨论】:

          【解决方案11】:

          试试这个它在不改变主题的情况下帮助了我。将您的 AppBarLayout 放在任何布局中。希望这会对您有所帮助

          <RelativeLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
          <android.support.design.widget.AppBarLayout
              android:id="@+id/app_bar"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:fitsSystemWindows="false"
              android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
          
          
              <android.support.v7.widget.Toolbar
                  android:id="@+id/toolbar"
                  android:layout_width="match_parent"
                  app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                  android:layout_height="?attr/actionBarSize"
                 android:background="@color/white">
                  <ImageView
                      android:src="@drawable/go_grocery_logo"
                      android:layout_width="108dp"
                      android:layout_height="32dp" />
              </android.support.v7.widget.Toolbar>
          
          
          </android.support.design.widget.AppBarLayout>
          </RelativeLayout>
          

          【讨论】:

            【解决方案12】:

            将此toolbar.getBackground().setAlpha(0); 添加到 OnCreate 方法中。添加这个: android:elevation="0dp" android:background="@android:color/transparent 到您的工具栏 xml 文件。

            【讨论】:

              【解决方案13】:

              对于那些处理片段并且在设置toolbar.getBackground().setAlpha(0); 或任何消失后它消失的人,我认为你必须将你的 AppBarLayout 带到 xml 中的最后一个,所以它的 Fragment 然后是 AppBarLayout 然后是 relativelayout/constraint/linear,无论你使用哪个。

              【讨论】:

                【解决方案14】:

                用途:

                outLineAmbientShadowColor="@null"
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-10-08
                  • 2013-11-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-01-29
                  • 1970-01-01
                  相关资源
                  最近更新 更多