android LinearLayoutManager新填充的项从底部堆叠

wkftcu5l  于 2023-04-10  发布在  Android
关注(0)|答案(1)|浏览(151)

当一个新项目被添加时,它是从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>

fdbelqdn

fdbelqdn1#

除非我错过了什么,你只是想要标准的行为?只是不要将reverseLayoutstackFromEnd设置为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的高度

相关问题