關(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.
意思是當(dāng)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是否會裁剪鞭呕,什么意思呢蛤育?
當(dāng)clipToPadding為默認(rèn)值true時,效果和沒有是一樣的葫松,padding添加在scrollview瓦糕,不參與滾動
當(dāng)clipToPadding為false時,padding的距離是可以一起隨內(nèi)容滑動的腋么。也就是他的child不會被自己的padding所裁剪(我理解為遮擋)
圖一:clipToPadding為默認(rèn)值true
圖二:clipToPadding為false