2016-10-13 5 views
0

Я пытаюсь добавить пользовательский вид в linearlayout, но представление не сохраняет его высоту. Высота 48dp так это фиксируется, но после того, как я addView() это изменится wrap_content:Android - просмотр не поддерживает высоту

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"> 

I даже попытался заставить его:

group.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 48)); 
+2

Аргумент высоты должен быть в пикселях не dp. Поэтому try '(int) TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, 48, context.getResources(). GetDisplayMetrics())' –

+0

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

+0

Вам не нужно «заставлять» что-либо. Просто передайте родительский 'LinearLayout' в вызов' inflate() '. –

ответ

0

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

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()))); 
+0

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