当一个新项目被添加时,它是从UI的底部填充的,所以我尝试了LinearLayoutManager setReverseLayout() == true but items stack from bottom的一些方法。我尝试了reverseLayout和stackFromEnd的不同组合,但仍然没有运气,新项目仍然是从UI的底部填充的,第二个项目是在第一个项目下面填充的,并且一直堆叠到顶部。
我想要的是,第一个项目将填充在UI的顶部,而不是底部,然后第二个项目将在第一个项目的下面,等等。
val recyclerView = findViewById<RecyclerView>(R.id.recyclerview)
val adapter = SomeListAdapter(Some params)
val llManager = LinearLayoutManager(this)
llManager.reverseLayout = true
llManager.stackFromEnd = true
recyclerView.adapter = adapter
recyclerView.layoutManager =llManager
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
android:id="@+id/layout"
tools:context=".AddressActivity">
<RelativeLayout
android:id="@+id/rl_address"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="60dp"
android:background="@color/black"
android:backgroundTint="#FEFBDE"
android:orientation="vertical"
android:padding="5dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:listitem="@layout/address_item"
android:layout_above="@+id/ll_addAddress"
/>
<RelativeLayout
android:id="@+id/ll_addAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginTop="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/addNewAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add New Address">
</Button>
<Button
android:id="@+id/viewAllAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="View all addresses">
</Button>
<Button
android:id="@+id/welcome_landlord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Welcome Landlord" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigation_menu"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_navigation_menu">
</com.google.android.material.bottomnavigation.BottomNavigationView>
</RelativeLayout>
1条答案
按热度按时间fdbelqdn1#
除非我错过了什么,你只是想要标准的行为?只是不要将
reverseLayout
或stackFromEnd
设置为true,这些的全部意义是颠倒项目的顺序并从底部/末端开始填充。如果您的
RecyclerView
仍然没有按照您想要的方式运行,这可能是因为您的布局方式。您使用的是RelativeLayout
,其中ll_addAddress
固定在底部,然后您的RecyclerView
位于android:layout_above="@+id/ll_addAddress"
的上方。结果是您的RV被固定在可用空间的底部。因为你的
RecyclerView
的高度是wrap_content
,房车的顶部(没有固定)* 随着您添加项目而向上增长 *。这意味着当您添加第一个项目时,默认情况下它 * 在RV的顶部 *,但 * RV的顶部 * 靠近空间的底部,刚好能容纳你添加的项目。所以除非你能看到RV的实际边界,否则看起来就像你是在底部添加项目,(您可以使用 * 布局检查器 * 查看正在运行的应用程序上发生的情况,或为RecyclerView
添加背景,以便您可以查看它发生的情况。解决的办法是,你真的需要把
RecyclerView
的顶部固定在某个东西上,这样它就在你的布局中占据了一个固定的空间。听起来你已经对“顶部”应该在哪里有了预期,但在你的布局中,它实际上取决于高度,而高度又取决于内容。当你添加了足够多的项目,RV需要滚动的时候,这也会给你带来问题-它不会,因为你没有限制它的高度,所以它会继续在屏幕外增长。滚动视图只有在它们的高度小于它们的内容的高度时才开始滚动,这需要你以某种方式限制高度-将它们的高度设置为
wrap_content
是一个危险信号。我已经很久没有使用
RelativeLayout
了,所以你也可以只将顶部与父级对齐,但我真的建议你使用ConstraintLayout
-这是开发灵活布局的现代方式,它允许你轻松地做一些事情,比如将顶部和底部限制在某些视图中,允许你填充可用空间。你必须限制RecyclerView
的高度