Android — view не сохраняет высоту

#java #android #layout #view #android-viewgroup

#java #Android #макет #Вид #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. Аргумент высоты должен быть в пикселях, а не в dp. Так что попробуйте (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, context.getResources().getDisplayMetrics())

2. Да , ты тот самый мужчина !! Отредактируйте ответ, я принимаю его!

3. Вам не нужно ничего «форсировать». Просто передайте родительский LinearLayout элемент в inflate() вызове.

4. На самом деле @AbtinGramian нашел решение, которое работает, я тоже попробую вашу идею

Ответ №1:

Основываясь на комментарии @Abtin Gramian, используемый конструктор принимает в качестве размера пиксели, а не dp (пиксели, не зависящие от плотности) из документации Android

android.view.ViewGroup.LayoutParams общедоступные LayoutParams (int width, int height)

Создает новый набор параметров макета с заданными шириной и высотой.

Параметры:

ширина — либо 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())));
 

Комментарии:

1. @An-droid смогли ли вы решить свою проблему? дайте мне знать, если это помогло =)