Android - 视图不保持高度

时间:2016-10-13 21:11:45

标签: java android layout view android-viewgroup

我正在尝试将自定义视图添加到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));

1 个答案:

答案 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())));