我正在尝试将自定义视图添加到linearlayout,但视图不会保持高度。高度是48dp所以它是固定的,但在我执行addView()后,它改为wrap_content:
LinearLayout cmsList = (LinearLayout) mView.findViewById(R.id.ll_cms_sections);
View group = getActivity().getLayoutInflater().inflate(R.layout.item_cms_group, null);
cmsList.addView(group);
群组:
<?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"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/clear_orange">
<com.dekibae.android.popinthecity.presentation.ui.widgets.FontText
android:id="@+id/tv_cms"
style="@style/TitleOrangexNormal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/margin_normal"
android:layout_marginStart="@dimen/margin_normal"
android:layout_toLeftOf="@+id/indicator"
android:gravity="center"
android:paddingTop="4dp"
android:text="TEST SECTION"
app:font="@string/plaak" />
<ImageView
android:id="@+id/indicator"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/margin_normal"
android:scaleType="centerInside"
android:src="@drawable/dropdown_arrow" />
</RelativeLayout>
cmsList
<LinearLayout
android:id="@+id/ll_cms_sections"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
我甚至试图强迫它:
group.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 48));
答案 0 :(得分:0)
了解@Abtin Gramian的注释,使用的构造函数用作维度像素,而不是dp(密度无关像素) 来自android文档
android.view.ViewGroup.LayoutParams public LayoutParams(int width, int height)
使用指定的宽度和高度创建一组新的布局参数。
参数:
width - WRAP_CONTENT,FILL_PARENT或固定大小(以像素为单位)
身高 - 或者 WRAP_CONTENT,FILL_PARENT或固定大小(以像素为单位)
所以通过使用
public static float applyDimension (int unit, float value, DisplayMetrics metrics)
我们可以从一种类型的指标(如TypedValue.COMPLEX_UNIT_DIP
)转换到另一种指标,在这种情况下,适用于当前显示。
group.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, context.getResources().getDisplayMetrics())));