android:fillViewport和android:clipToPadding的使用

關(guān)于android:fillViewport和android:clipToPadding的使用

? 今天在做一個典型的CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout頁面時,發(fā)現(xiàn)底部的FloatingActionButton在小屏幕上,會遮擋部分scroll view中的內(nèi)容,所以就想在scrollview上加paddingBottom能讓內(nèi)容能居于FloatActionButton的上面,就遇到了一些問題:

android:fillViewport

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".ScrollingActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:toolbarId="@+id/toolbar">

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

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

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.constraint.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingBottom="50dp">

                <TextView
                    android:id="@+id/textView2"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_marginTop="8dp"
                    android:background="@color/colorAccent"
                    android:paddingBottom="50dp"
                    android:text="123"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <TextView
                    android:id="@+id/textView"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_marginStart="8dp"
                    android:layout_marginEnd="8dp"
                    android:background="@color/colorPrimaryDark"
                    android:paddingBottom="50dp"
                    android:text="456"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/textView2" />
            </android.support.constraint.ConstraintLayout>
        </android.support.constraint.ConstraintLayout>
    </android.support.v4.widget.NestedScrollView>
    <!--<include layout="@layout/content_scrolling" />-->

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_dialog_email" />

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

android:fillViewport

Defines whether the scrollview should stretch its content to fill the viewport.

意思是當scrollview中的children不足以撐滿整個scrollview滿屏(以collapsingbar收縮時狀態(tài)計算)時,設(shè)置這個屬性為true可以讓scrollview的布局撐到滿屏。

  • 如果paddingBottom屬性設(shè)置在child中,這里的paddingBottom是參與scrollview滾動的,這個好理解,畢竟是在child中設(shè)置的
  • 如果paddingBottom屬性設(shè)置在scrollview上面,paddingBottom的距離是不參與scrollview滾動的(和recyclerview類似)

android:clipToPadding的使用

android:clipToPadding

Defines whether the ViewGroup will clip its children and resize (but not clip) any EdgeEffect to its padding, if padding is not zero. This property is set to true by default.

May be a boolean value, such as "true" or "false".

定義ViewGroup(這里scrollview)滾動且padding不為0時,children是否會裁剪,什么意思呢?

  • 當clipToPadding為默認值true時,效果和沒有是一樣的,padding添加在scrollview,不參與滾動

  • 當clipToPadding為false時,padding的距離是可以一起隨內(nèi)容滑動的。也就是他的child不會被自己的padding所裁剪(我理解為遮擋)

圖一:clipToPadding為默認值true


device-2019-02-27-144822.gif

圖二:clipToPadding為false


device-2019-02-27-145217.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容