删除动作栏下方的阴影


208

我使用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中,我不希望在操作栏下方有一个阴影。使它消失的样式项是什么?

Answers:


481

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

为了去除阴影,请将其添加到您的应用主题中:

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

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

getSupportActionBar().setElevation(0);

从状态栏(而不是操作栏)下方移除阴影不是一种样式吗?
米哈尔ķ

96
谢谢,它消失了。需要注意的重要一点是,这行代码应出现在应用程序主题中,而不是操作栏样式中。
米哈尔ķ

3
我工作!需要明确的是,这行代码应添加到App Theme标签中,而不是ActionBar Theme标签中。
tuoxie007

另外要注意的另一件事是,您应该在values,values-v11,value-v14中更改主题(如果使用工具栏,请忽略此)
TheOne_su 2015年

6
对于棒棒糖之前的设备getSupportActionBar().setElevation(0);不起作用。因此,您已经放入<item name="android:windowContentOverlay">@null</item>了应用程序主题。我有类似的问题。现在我都拥有了。在应用程序主题中从setElevation并添加windowContentOverlay项。setElevation适用于android 5.0及更高版本,而其他适用于pre-lollipop。干杯!
Reaz Murshed

140

对于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>

1
对于5.0之前版本的设备不适合我。问题是,我windowContentOverlay在操作栏主题中添加了,而不是应用程序主题。
奥利夫,2015年

我很抱歉,但我想做相反的事情,使高程阴影实际上出现在棒棒糖之前的设备上(我已经android:elevation为棒棒糖设备做到了这一点)。使用这种方法,我无法做到这一点。我相信那将是直截了当的。为高程属性放置一个非零值,仅此而已。
acrespo,2015年

如果您不触摸android:windowContentOverlay属性,则默认情况下应该可见它,也许检查您是否使用了正确的主题...我认为您需要使用AppCompat主题。
Sloosh

但是如何处理android:windowContentOverlay预棒棒糖API?如果我的minSDK是棒棒糖前的,但目标是21,我不能编译吗?
Opiatefuchs '16

2
这有效,但仅当我使用<style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">不带style/in parent属性时才有效。
伊戈尔(Igor)'18年

103

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

getSupportActionBar().setElevation(0);

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


1
您是否必须对每个活动都执行此操作,或者有一种快速的方法将其应用于所有活动?我现在将添加所有我的活动。谢谢!
cnfw 2014年

就像其他任何actionbar方法(例如标题)一样,我会说每一项活动
Kieron 2014年

真可惜 最好在styles.xml文件中设置这样的参数。也许将来会有更新
cnfw 2014年

这不适用于低于5.0的版本。支持操作栏是否应该与所有以前的设备兼容?
splinter123

与@ splinter123相同:((想知道如何在使用AppCompat时去除棒棒糖上的阴影。)
FD_

55

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


1
大家看看,只要套用这个解决方案,别忘了其他人说的话。谢啦!有用!很简单的解决方案!
S布鲁斯

1
像这样使用:<android.support.design.widget.AppBarLayout android:layout_width =“ match_parent” android:layout_height =“ wrap_content” app:elevation =“ 0dp” android:theme =“ @ style / AppTheme.AppBarOverlay”>
巴拉特库尔·拉坦(Kul Ratan)

@MarcoFerrari在AppBarLayout中将其用作“ getSupportActionBar()。setElevation(0);” 不起作用。
Salil Dhawan

39

如果您正在使用ActionBarSherlock

在您的主题中添加以下内容:

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

这是一个更好的答案,它指定了兼容性项目
1owk3y 2014-11-26

25

您必须设置app:elevation="0dp"android.support.design.widget.AppBarLayout,然后它的作品。

<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>

1
这导致AppBar的阴影无处不在-如何以编程方式控制它?
瑞士

14
app:elevation="0dp" 

但不是

android:elevation="0dp"

在android L上为我工作


2

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

如果要在称为的活动中进行更改,则MyActivity.java必须先获得ActionBar一个。

首先导入ActionBar课程

import android.support.v7.app.ActionBar;

导入后,您必须初始化操作栏变量并将其高程设置为0。

 private ActionBar toolbar;

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

1

对于Xamarin开发者,请用:SupportActionBar.Elevation = 0;用于AppCompatActivityActionBar.Elevation = 0;用于非COMPAT活动


1

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

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

不知道为什么不赞成这样做(我是Kotlin的新来者),但这对我
有用

1

尝试此操作对我没有改变主题的帮助。将您的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>

0

对于那些处理片段的人,它在设置toolbar.getBackground().setAlpha(0);或消失后消失了,我认为您必须将您的AppBarLayout带到xml的最后,因此,无论您使用哪个片段,然后是AppBarLayout然后是relativelayout / constraint / linear。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.