我在RecyclerView
内有一个ConstraintLayout
,我需要将高度设置为0dp,以便它遵守其约束并且不会进入其他视图。但是一旦列表被加载,其设置就位于列表的中间。
如果我将高度设置为wrap_content
,则此问题已解决,但是看起来不正确,因为它填满了屏幕并且位于其他视图下
我什至尝试将RV包装在FrameLayout
中,以便可以将RV设置为包装内容,并且仍然遵守约束,但这使我发布了一个(中间的装货)。
<ConstraintLayout>
<view above>
<android.support.v7.widget.RecyclerView
android:id="@+id/messagesRecyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="view above"
app:layout_constraintBottom_toTopOf="view below"
android:layout_marginBottom="10dp" />
<view below>
</ConstraintLayout>
以及我用于设置RV的代码:
with(recyclerView){
setHasFixedSize(true)
overScrollMode = View.OVER_SCROLL_NEVER
setLayoutManager(LinearLayoutManager(context).apply { stackFromEnd = true })
setAdapter(adapter)
setItemAnimator(itemAnimator)
}
我知道我可以使用scrollToPosition()
,但是当列表中有图像时,我必须等到它们全部加载后才能调用它,这需要几秒钟的时间并且显示出来对用户来说口吃。
UPDATE 我最初将高度设置为0dp,这将导致列表从滚动到中间开始。稍后,我将其设置为wrap_content和match_parent,这将导致列表跨越整个宽度或窗口并与容器中的其他视图重叠。
答案 0 :(得分:0)
注意:
stackFromEnd = true
当stackFromEnd为true时,列表将从视图底部开始填充其内容。
答案 1 :(得分:0)
只需将回收站视图高度设置为0dp 。
<ConstraintLayout>
<view above>
<android.support.v7.widget.RecyclerView
android:id="@+id/messagesRecyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="view above"
app:layout_constraintBottom_toTopOf="view below"
android:layout_marginBottom="10dp" />
<view below>
</ConstraintLayout>
答案 2 :(得分:0)
您已将约束设置为父视图的顶部和底部,因此该视图将延伸至顶部和底部。您需要将约束设置如下
<ConstraintLayout>
<view above>
<android.support.v7.widget.RecyclerView
android:id="@+id/messagesRecyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/your_above_view_id"
app:layout_constraintBottom_toTopOf="@id/your_below_view_id"
android:layout_marginBottom="10dp" />
<view below>
</ConstraintLayout>
答案 3 :(得分:0)
结果是,如果将RV(RecyclerView)高度设置为0dp(又称匹配约束),则还必须将宽度设置为0dp。这是一个Android错误。
这是修复它的代码:
<android.support.v7.widget.RecyclerView
android:id="@+id/messagesRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="[view above]"
app:layout_constraintBottom_toTopOf="[view below]"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginBottom="10dp" />