#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 смогли ли вы решить свою проблему? дайте мне знать, если это помогло =)