无法在 Recycleview 中更改容器的高度
Impossible to change the height of a container in Recycleview
几个小时以来我遇到了一个大麻烦;
我有一个 recyclerview,每个项目都有几个元素。对于其中一个(lv_container),我可以降低它的高度但不能增加它。
见截图:
xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/dashboard_part_medical_file_locked_title"
android:textSize="18sp"
android:textStyle="bold" />
<RelativeLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/row_dashboard_color"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/dashboard_part_image"
android:layout_width="80dp"
android:layout_height="95dp"
android:layout_alignParentEnd="true"
android:paddingBottom="20dp"
android:paddingEnd="10dp"
android:paddingStart="10dp"
android:paddingTop="20dp"
android:src="@drawable/dossier_medical" />
<RelativeLayout
android:id="@+id/lv_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/dashboard_part_image"
android:layout_alignParentStart="true"
android:layout_alignTop="@+id/dashboard_part_image"
android:layout_toStartOf="@+id/dashboard_part_image"
android:background="@android:color/white"
android:padding="10dp">
<ImageView
android:id="@+id/sup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_sup" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/sup"
android:text="@string/dashboard_part_medical_file_inside" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
和viewholder的代码
DisplayMetrics metrics = pContext.getResources().getDisplayMetrics();
RelativeLayout.LayoutParams lvContainerParams = (RelativeLayout.LayoutParams) lvContainer.getLayoutParams();
lvContainerParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;
lvContainerParams.height = (int) (40 * metrics.density + 20 * metrics.density);
lvContainer.setLayoutParams(lvContainerParams);
ViewGroup.LayoutParams mainContainerParams = mainContainer.getLayoutParams();
mainContainerParams.height = (int) (lvContainerParams.height + 20 * metrics.density);
mainContainer.setLayoutParams(mainContainerParams);
ViewGroup.LayoutParams params = itemView.getLayoutParams();
params.height = (int) (mainContainerParams.height + 50 * metrics.density);
itemView.setLayoutParams(params);
当我更改 lvContainer(白色容器)的高度时,mainContainer 的高度已被很好地修改(如您在蓝色容器中所见),但白色容器始终保持固定。但是,在调试中,高度计算得很好。
我尝试调用 lvContainer.invalidate()
and/or lvContainer.requestLayout()
,但没有任何改变。
错误是什么?为什么item和mainContainer的高度可以修改,lvContainer的这个不行?
我需要你的帮助
谢谢
尝试删除此行
android:layout_alignBottom="@+id/dashboard_part_image"
几个小时以来我遇到了一个大麻烦;
我有一个 recyclerview,每个项目都有几个元素。对于其中一个(lv_container),我可以降低它的高度但不能增加它。
见截图:
xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/dashboard_part_medical_file_locked_title"
android:textSize="18sp"
android:textStyle="bold" />
<RelativeLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/row_dashboard_color"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/dashboard_part_image"
android:layout_width="80dp"
android:layout_height="95dp"
android:layout_alignParentEnd="true"
android:paddingBottom="20dp"
android:paddingEnd="10dp"
android:paddingStart="10dp"
android:paddingTop="20dp"
android:src="@drawable/dossier_medical" />
<RelativeLayout
android:id="@+id/lv_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/dashboard_part_image"
android:layout_alignParentStart="true"
android:layout_alignTop="@+id/dashboard_part_image"
android:layout_toStartOf="@+id/dashboard_part_image"
android:background="@android:color/white"
android:padding="10dp">
<ImageView
android:id="@+id/sup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_sup" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/sup"
android:text="@string/dashboard_part_medical_file_inside" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
和viewholder的代码
DisplayMetrics metrics = pContext.getResources().getDisplayMetrics();
RelativeLayout.LayoutParams lvContainerParams = (RelativeLayout.LayoutParams) lvContainer.getLayoutParams();
lvContainerParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;
lvContainerParams.height = (int) (40 * metrics.density + 20 * metrics.density);
lvContainer.setLayoutParams(lvContainerParams);
ViewGroup.LayoutParams mainContainerParams = mainContainer.getLayoutParams();
mainContainerParams.height = (int) (lvContainerParams.height + 20 * metrics.density);
mainContainer.setLayoutParams(mainContainerParams);
ViewGroup.LayoutParams params = itemView.getLayoutParams();
params.height = (int) (mainContainerParams.height + 50 * metrics.density);
itemView.setLayoutParams(params);
当我更改 lvContainer(白色容器)的高度时,mainContainer 的高度已被很好地修改(如您在蓝色容器中所见),但白色容器始终保持固定。但是,在调试中,高度计算得很好。
我尝试调用 lvContainer.invalidate()
and/or lvContainer.requestLayout()
,但没有任何改变。
错误是什么?为什么item和mainContainer的高度可以修改,lvContainer的这个不行?
我需要你的帮助 谢谢
尝试删除此行
android:layout_alignBottom="@+id/dashboard_part_image"