使RecyclerView滚动到固定高度

时间:2018-05-24 08:03:19

标签: java android xml android-recyclerview

我想在ReyclerView身高/地区内滚动Fixed

示例XML以演示用例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ele_parent_ll"
    android:layout_width="match_parent"
    android:orientation="vertical"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent">


    <android.support.v4.widget.NestedScrollView
        android:id="@+id/election_parent_sv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:id="@+id/sample_id"
            android:background="@color/white"
            android:fitsSystemWindows="true">

            <ImageView
                android:contentDescription="@string/btn_youtube"
                android:layout_width="match_parent"
                android:layout_height="115dp"
                android:id="@+id/election_banner"
                android:background="@drawable/some_drawable"
                android:adjustViewBounds="true"/>

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">



                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/mid_parent"
                    android:layout_marginLeft="@dimen/view_margin_10"
                    android:layout_marginRight="@dimen/view_margin_10"
                    android:layout_marginTop="@dimen/view_margin_10"
                    android:orientation="horizontal"
                    android:weightSum="1">

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight=".5"
                        android:orientation="vertical">

                        <Button
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:background="@drawable/shaded_purple_new_local"
                            android:text="Layout heading"
                            android:textColor="@color/white" />

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:text="Choose one"
                            android:textColor="@color/icon_yellow"
                            android:textSize="13sp" />


                        <android.support.v7.widget.RecyclerView
                            android:id="@+id/candidate_recycler"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:nestedScrollingEnabled="false">
                        </android.support.v7.widget.RecyclerView>
                    </LinearLayout>
                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="@dimen/view_margin_10"
                        android:layout_marginLeft="@dimen/view_margin_10"
                        android:layout_weight=".5"
                        android:orientation="vertical">
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>

            <!--Sample Layout to make the screen scrollable for the example-->
            <RelativeLayout
                android:id="@+id/samp_RL"
                android:layout_width="match_parent"
                android:layout_height="200dp">
            </RelativeLayout>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</LinearLayout>

在这种情况下,RecyclerView占用了它所需的空间,列表相当长,因此可滚动区域的总长度变长,因此看到RCV以下元素的概率已经降低。

要解决此问题,我想在固定区域内滚动RecyclerView,以便如果用户对此不感兴趣,他可以轻松查看RecyclerView

下面的其他元素
  1. 当用户在RCV区域内滚动时,RCV应滚动。
  2. 当用户滚动到RCV外部时,整个布局应滚动
  3. enter image description here

    draw.io

    处制作的图片

    我尝试过:

    1. 使RecyclerView的高度保持不变:它是Jammed并且根本不滚动。
    2. Making Recyclerview Fixed Height and Scrollable:它也是一样的。它被卡住了,根本没有滚动。
    3. Scrollable NestedScrollViews inside RecyclerView:试过这个,但无法与我目前的情况建立联系。
    4. 请告诉我这里缺少的东西。

3 个答案:

答案 0 :(得分:1)

你不需要做任何事情。默认情况下它只是这样工作! 请尝试以下代码 -

recyclerView = (RecyclerView) view.findViewById(R.id.my_recycler_view);
        recyclerView.setHasFixedSize(false);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        mAdapter = new MyAdapterClass(getContext(), lst);
        recyclerView.setAdapter(mAdapter);





<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    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="com.example.iosdteachingapp.MainActivity">
<LinearLayout
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="100sp"
        android:text="hello"/>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="200sp"
        android:layout_height="300sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="end"
        android:padding="20sp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="end"
        android:padding="20sp"/> <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="end"
    android:padding="20sp"/> <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="end"
    android:padding="20sp"/>
</LinearLayout>
</ScrollView>

答案 1 :(得分:0)

android:nestedScrollingEnabled="false"添加到您的RecyclerView。

答案 2 :(得分:0)

使用param动态设置Recycler视图高度。 您甚至可以通过设置高度=回收器视图的每个元素的大小*列表中元素的数量来设置高度以仅显示特定的元素数。 试试这个:

ViewGroup.LayoutParams 
params=recyclerview.getLayoutParams();
params.height=100;
recyclerview.setLayoutParams(params);