簡體   English   中英

Android 折疊工具欄刪除高程和陰影

[英]Android Collapsing Toolbar remove elevation and shadow

我正在嘗試使布局具有漸變到折疊的應用程序欄,這是純色。 這應該可以通過app:elevation="0dp"來完成,但這並沒有奏效。 但是,當我在我的應用程序上運行“即時運行”時,我得到了想要的結果,而不是運行完整的構建。 讓我附上圖片:

這是當前的外觀:帶有陰影的 UI,不想要的結果

在此處輸入圖片說明

這是我運行即時運行時所需的外觀/出現的內容: UI 沒有陰影,所需的結果

在此處輸入圖片說明

這是我的布局文件:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:windowActionBar="false"
android:id="@+id/main_background">

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/app_bar_height"
    android:fitsSystemWindows="true"
    android:theme="@style/AppTheme"
    android:elevation="0dp"
    app:elevation="0dp">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:toolbarId="@+id/toolbar"
        android:elevation="0dp"
        app:elevation="0dp">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin">

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

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

</recycler>

如果不清楚,我指的是 app_bar 下方標有“Reee”的陰影。 第一張圖有陰影,第二張圖沒有陰影。 我不想有陰影。 但是,我只能在運行即時運行時實現這種外觀,然后在下一次運行/完整編譯時它就會消失。

我仍在尋找解決此問題的方法,並且對我還沒有找到任何東西感到非常沮喪。 我已經嘗試過將stateListAnimator=@null設置stateListAnimator=@null示例。

好吧,做一些進一步的研究,我有一個 SwipeRefreshLayout,在這個應用欄下面有一個 Recyclerview。 當我刪除 RecyclerView 時,我得到了預期的效果。 我的 RecyclerView 可以做什么,我該如何解決?

剛設置

android:stateListAnimator="@null"

app:elevation="0dp"

注意:你應該使用app:命名空間而不是android:

到你的 AppBarLayout

您可以通過設置自定義stateListAnimator來做到這stateListAnimator

創建一個新的動畫“appbar_not_elevated.xml” animatorres

<item app:state_collapsible="true" app:state_collapsed="true">
    <objectAnimator android:propertyName="elevation"
                    android:valueTo="0"
                    android:valueType="floatType"
                    android:duration="1"/>
</item>

<item>
    <objectAnimator android:propertyName="elevation"
                    android:valueTo="0"
                    android:valueType="floatType"
                    android:duration="1"/>
</item>

這會將折疊和展開狀態的高程設置為零。

然后將stateListAnimator設置為AppBarLayout

android:stateListAnimator="@animator/appbar_not_elevated"

根據所使用的支持庫,如果您閱讀源代碼來設置應用欄高度,您將閱讀:

/**
 * @deprecated target elevation is now deprecated. AppBarLayout's elevation is now
 * controlled via a {@link android.animation.StateListAnimator}. If a target
 * elevation is set, either by this method or the {@code app:elevation} attribute,
 * a new state list animator is created which uses the given {@code elevation} value.
 *
 * @attr ref android.support.design.R.styleable#AppBarLayout_elevation
 */

它告訴你,你要么使用app:elevation要么使用狀態列表動畫師。 對於第二個選項,在文件夾animator-v21 中添加一個 xml 選擇器,然后將其設置為如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <objectAnimator android:duration="1"
                    android:propertyName="elevation"
                    android:valueTo="0dp"
                    android:valueType="floatType"/>
</item>

然后在 xml 中從您的應用程序欄中引用它:

android:stateListAnimator="@animator/my_appbar_state_list_animator"

我忽略了最初提供問題中我的 AppBar 下的 RecyclerView,認為問題僅在於 AppBarLayout。 但我已經解決了這個問題。 我的 RecyclerView 看起來像這樣:

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="0dp"
    android:background="@drawable/gradient_blue_4"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/transactions"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:clipToPadding="false"
        android:fadeScrollbars="true"
        android:overScrollMode="always"
        android:paddingBottom="48dp"
        android:scrollbars="none"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:background="?selectableItemBackground" />

</android.support.v4.widget.SwipeRefreshLayout>

在我的AppBarLayout下面。 不完全確定為什么這解決了這個問題,但刪除?selectableItemBackground作為 RecyclerView 的背景解決了這個問題,並給我留下了想要的結果。

感謝所有提供的答案,我最初更感興趣,因為我通過運行即時運行得到了我想要的結果。 不幸的是,這種見解沒有提供額外的幫助。

將您的 AppBarLayout 的高度和平移Z 設置為零

appBarLayout.translationZ = 0f
appBarLayout.elevation = 0f

在你的java文件中..

為您的應用欄設置一個變量並使用findViewById(R.id.whatever ) 傳入設置的 id

然后使用

void setShadowEnabled (boolean enabled)

禁用陰影。

希望這有助於...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM