设置View的最大高度
直接使用maxHeight属性没效果,可以通过ConstraintLayout的layout_constraintHeight_max约束来实现:
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rvConstraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/ivCard">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginHorizontal="@dimen/dp20"
android:nestedScrollingEnabled="false"
android:paddingBottom="@dimen/dp12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintHeight_max="@dimen/dp300"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
clipToPadding 属性
默认为true,默认子布局不能在padding区域绘制。设置父布局的clipToPadding="false",当子布局在向上移动的过程中,其可以在padding区域绘制了。 为什么一开始没绘制在padding区域,而滑动的时候可以绘制呢?
clipToPadding 原理
当clipToPadding == true时,子布局的Canvas会被父布局裁减,而裁减的尺寸即为padding的距离(此处忽略scroll距离)。
初始绘制:子布局就不能在padding里绘制的。
滑动绘制:Canvas虽然被限制了尺寸,但是还可以移动Canvas。当子布局进行滑动的时候,设置了clipToPadding==false,父布局不会对子布局的Canvas进行裁减,由于不进行裁减,所以可以显示(在父布局范围内,若是超出父布局,就涉及到ClipChildren属性了)。
当父布局设置了padding,而又想子布局在滑动的时候可以无视padding,通过设置clipToPadding 属性,来满足在padding区域绘制。
使用场景:clipToPadding 在RecyclerView里的运用
RecyclerView滑动
- 滑到某个位置
binding.rv.apply {
postDelayed({ smoothScrollToPosition(this@InfoFragment.adapter.size() - 1) }, 60)
}
NestedScrollView滑到某个view底部
binding.scrollLayout.postDelayed({
binding.scrollLayout.smoothScrollTo(
0,binding.feedbackView.bottom
)
}, 60)
android APP 桌面icon消失不见
androidManifest中,<intent_filter>里的category设置重复导致,是由于同一个intent-filter设置了多个category的原因,解决方法,分两个intent-filter即可。