如何调整recyclerview高度?

时间:2017-09-18 06:49:11

标签: android android-layout

我希望recyclerview调整它的高度,以便项目不会隐藏在价格栏后面(见图)

这是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutMainContainer"
    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.mridulahuja.groceryapp.activities.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:background="@null" />

    <RelativeLayout
        android:id="@+id/layoutPricebar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#454560"
        android:layout_alignParentBottom="true"
        android:visibility="gone">

        ...
        ...

    </RelativeLayout>

</RelativeLayout>

我正在使用代码来调整recyclerview的大小:

ViewTreeObserver pricebarvto = layoutPricebar.getViewTreeObserver();
pricebarvto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
            layoutPricebar.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        } else {
            layoutPricebar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
        pricebarHeight = layoutPricebar.getMeasuredHeight();
    }
});


RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) recyclerView.getLayoutParams();
params.height = relativeLayoutContainerHeight - pricebarHeight;
recyclerView.setLayoutParams(params);

其中relativeLayoutContainerHeight是根RelativeLayout

的高度

但高度并没有改变。当我硬编码一个很大的价值时,它正在改变 至pricebarHeight,例如160.而且我给价格栏的高度只有50dp。

此外,我正在使用此动画来显示价格栏:

<translate
xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fromYDelta="180%"
    android:toYDelta="0%">
</translate>

enter image description here

5 个答案:

答案 0 :(得分:2)

使用垂直方向的线性布局而不是相对布局,并提供回收者视图

android:layout_weight="1"

答案 1 :(得分:1)

如果您使用RelativeLayout,则应使用android:layout_marginBottom

  

指定此视图底部的额外空间。这个空间是   在这个观点之外的界限。保证金值应为正值。

<强> XML

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        ................
        android:layout_marginBottom="50dp" />

如果您需要LinearLayout,请按照android:weightSum逻辑。

  

定义最大重量总和。如果未指定,则总和通过计算   添加所有子项的layout_weight。这可以用于   实例给予单个孩子50%的总可用空间   给它一个layout_weight为0.5并将weightSum设置为1.0。

答案 2 :(得分:1)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutMainContainer"
    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.mridulahuja.groceryapp.activities.MainActivity">

    <RelativeLayout
        android:id="@+id/layoutPricebar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#454560"
        android:layout_alignParentBottom="true"
        android:visibility="gone">

        ...
        ...

    </RelativeLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        android:layout_above = "@id/layoutPricebar"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:background="@null" />



</RelativeLayout>

答案 3 :(得分:0)

尝试使用android:layout_below:“@ + id / recycler_view”将页面价格栏的id:layoutPricebar放在recycleler_view下面:

 <RelativeLayout
    android:id="@+id/layoutPricebar"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#454560"
    android:layout_below="@+id/recycler_view"
    android:layout_alignParentBottom="true"
    android:visibility="gone">

答案 4 :(得分:0)

如果你的价格栏高度为50dp,请使用RecyclerView android:layout_marginBottom =“50dp”这将解决您的问题,无需使用java代码来调整Recyclerview的大小