Android:我无法删除工具栏上的高程/阴影

时间:2015-07-06 13:22:25

标签: android

您好我想从API 21及更高版本的工具栏中删除高程和阴影效果。以下是我试过的内容

setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setElevation(0);

我的XML工具栏。我试图将高程设置为0dp

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:elevation="0dp"
    android:theme="@style/ToolbarStyle"
    app:theme="@style/ToolbarStyle"
    >

这是ToolbarStyle,如果它有帮助

<style name="ToolbarStyle" parent="ThemeOverlay.AppCompat.Dark">
    <item name="colorControlNormal">@android:color/white</item>
</style>

编辑1:在样式v21中尝试以下操作。结果仍然相同

<style name="ToolbarStyle" parent="ThemeOverlay.AppCompat.Dark">
    <item name="colorControlNormal">@android:color/white</item>
    <item name="android:elevation">0dp</item>
</style>

编辑2:工具栏位于我的布局中

android.support.v4.widget.DrawerLayout 

    xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.design.widget.AppBarLayout
                android:id="@+id/appBarLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <include layout="@layout/toolbar" />

11 个答案:

答案 0 :(得分:103)

你可以通过一个简单的步骤来做到这一点。不要从布局中删除android.support.design.widget.AppBarLayout,而是将属性app:elevation="0dp"添加到其中。您的最终布局将是:

<android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:elevation="0dp">
            ...
</android.support.design.widget.AppBarLayout>

答案 1 :(得分:10)

这删除工具栏上的高程(android:stateListAnimator =“@ null”),stateListAnimator用于API级别21或更高,因此插入工具道具(在命名空间声明之前),如下所示:

//xmlns:tools="http://schemas.android.com/tools" in parent or start element

     <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stateListAnimator="@null" 
        android:theme="@style/AppTheme.AppBarOverlay"
        tools:targetApi="21">

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

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

//your content goes here like RecyclerView, Card or other layout 
  

以下是我的示例结果:

enter image description here

答案 2 :(得分:6)

在appBar上使用setOutlineProvider(null);。请务必查看SDK版本。 :)

答案 3 :(得分:5)

只需删除布局层次结构的这一部分:

<android.support.design.widget.AppBarLayout
                android:id="@+id/appBarLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

它负责创建阴影。工具栏本身不会投射任何阴影。

答案 4 :(得分:5)

转到要删除ActionBar高程的活动。 在setContent(....)之前,请求ActionBar功能(即如果你还没有直接声明它)

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    getSupportActionBar().setElevation(0);

或者只是调用声明的工具栏变量 例如      toolbar.setElevation(0);

答案 5 :(得分:3)

在AppBarLayout中使用app:elevation="0dp"。确保将工具栏放在AppBarLayout中,如下所示 -

    <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_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/AppTheme.AppBarOverlay"
        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_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/firstOption"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

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

并将此行添加到您的活动中 - findViewById(R.id.appBarLayout).bringToFront();
这将把AppBar带到前面。

答案 6 :(得分:2)

为v21创建另一种样式并添加

<item name="android:elevation">@dimen/toolbar_elevation</item>这种风格。在普通样式上不要使用高程,不要在xml中使用它,只需使用style="@style/yourCustomToolbarStyle"

答案 7 :(得分:2)

在代码中获取appbarlayout:

var appbarLayout = findviewbyid<AppBarLayout>(resource.id.  );  

设置属性

appbarLayout.StateListAnimator=null;

答案 8 :(得分:1)

解决方案很简单。只需将以下行添加到您的AppBar布局中即可。之后,无需为工具栏或AppBar布局添加高程。

android:stateListAnimator="@null"

答案 9 :(得分:1)

使用 android:outlineSpotShadowColor="assign transparent colour" 你的阴影会消失,我的工作如下

enter image description here

答案 10 :(得分:0)

要使用java代码删除高程,请仅使用以下一行... getSupportActionBar()setElevation(0);