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

圖二:clipToPadding為false
