如何使用 AppCompat.Light.NoActionBar 删除操作栏下方的阴影?

Posted

技术标签:

【中文标题】如何使用 AppCompat.Light.NoActionBar 删除操作栏下方的阴影?【英文标题】:how to remove shadow below actionbar with AppCompat.Light.NoActionBar? 【发布时间】:2015-10-08 02:38:30 【问题描述】:

我尝试使用 Theme.AppCompat.Light.NoActionBar 删除工具栏下方的阴影,使用了以前回答过它的人的每一个建议,但没有人成功。我试过了

<item name="android:windowContentOverlay">@null</item>    

<item name="android:windowContentOverlay">@drawable/solid_line</item> ....

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle">
<solid android:color="@color/accueil_color" />
<size android: />
</shape>

有了这个,

android:elevation="0dp"

阴影从屏幕顶部消失但并未消失。

你有什么想法可以完全去除这条阴影线吗??

【问题讨论】:

【参考方案1】:

我不是专家,但我在几个小时前遇到了同样的问题。所以这里的想法是使用AppCompat 我们必须管理库属性而不是Android 属性。换句话说,而不是 android:elevation 尝试 app:elevation:

<android.support.design.widget.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/appbar"
    android:layout_
    android:layout_
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true"
    app:elevation="0dp">

    <android.support.v7.widget.Toolbar
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

</android.support.design.widget.AppBarLayout>

编辑:

我刚刚尝试了另一个没有AppBarLayout 的选项。这种方式对我来说非常好,阴影完全消失了。所以我怀疑问题出在你的另一个视图中。我不认为这是你的ToolBar 造成的阴影。

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:id="@+id/toolbar"
    android:layout_
    android:layout_
    android:minHeight="?attr/actionBarSize"
    app:elevation="0dp" />

【讨论】:

哼我的xml是这样的,我没有android.support.design.widget.AppBarLayout,只有工具栏小部件, 由于缺乏业力,无法评论您的答案)。我最好的猜测是您的第一个视图会删除阴影,而不是工具栏。 Arf ...我试图在 android.support.v7.widget.Toolbar 中更改高度,并更改阴影的位置,我认为这不是原因...:/抱歉,这已经奏效了:D 认为如何解决? 我不是 100% 确定我理解最后一条评论...删除整个属性怎么样 - android:elevation="@dimen/statusBarElevation" ? 抱歉我的错误,我在 schemas.android.com/apk/res/android" 中放置了 android:elevation="0dp" 并消除了阴影线:D。【参考方案2】:

使用app:elevation="0dp" instead of android:elevation

【讨论】:

【参考方案3】:

我遇到了同样的问题。在android.support.design.widget.AppBarLayout 上应用app:elevation="0dp" 可以解决问题

【讨论】:

正确答案。谢谢!【参考方案4】:

在AppBarLayout中添加app:elevation="0dp",阴影将被隐藏。

【讨论】:

别忘了 findViewById(R.id.appBar).bringToFront(); ***.com/a/41931318/2736039【参考方案5】:

我遇到了同样的问题。

如果您的工具栏在 android.support.design.widget.AppBarLayout 内 在android.support.design.widget.AppBarLayout上添加 app:elevation="0dp" 将解决您的问题。

Toolbar 上添加app:elevation="0dp"

<android.support.design.widget.AppBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/appbar"
android:layout_
android:layout_
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true"
app:elevation="0dp">

<android.support.v7.widget.Toolbar
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_
    android:layout_
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

希望对你有帮助:)

【讨论】:

【参考方案6】:

只需在super.onCreate(savedInstanceState);之后使用

if(getSupportActionBar() != null)

   getSupportActionBar().setElevation(0);

【讨论】:

正是我想要的!【参考方案7】:

只需将您的 AppBarLayout 放在一个单独的 XML 文件中的 LinearLayout 中,然后将此 XML 包含到您的主 XML 中。

【讨论】:

【参考方案8】:

@DmitryO 哼我的xml是这样的,我没有android.support.design.widget.AppBarLayout,只有工具栏小部件,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    xmlns:materialdesign="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    android:background="@color/white"
    android:theme="@style/AppThemeAccueil">

    <View xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:background="@color/accueil_colorDark"
        android:elevation="@dimen/statusBarElevation"/>

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:popupTheme="@style/AppThemeAccueilToolbar"
        android:theme="@style/AppThemeAccueilToolbar"
        android:id="@+id/toolbarAccueil"
        android:layout_
        android:layout_
        android:minHeight="?attr/actionBarSize"
        materialdesign:elevation="0dp"
        android:elevation="0dp"
        android:outlineProvider="background"
        android:layout_marginTop="@dimen/appBarTopMargin" >

    </android.support.v7.widget.Toolbar>
</RelativeLayout>

我有这个吗? (我认为这不会改变结果)

【讨论】:

【参考方案9】:

如果您没有在布局上使用工具栏,并且您有来自AppCompactActivity 的默认工具栏,这可以帮助您

@Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

getSupportActionBar().setElevation(0);

至少它对我有用。

问候,

【讨论】:

【参考方案10】:

在 Kotlin 中,使用:

supportActionBar!!.elevation = 0.0f 

问候!

【讨论】:

以上是关于如何使用 AppCompat.Light.NoActionBar 删除操作栏下方的阴影?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?