Программная настройка макета

#android #layout

#Android #макет

Вопрос:

У меня есть прокручиваемый CardView, я могу добавлять новые карты и настраивать их значения TextView.

Мой макет карты выглядит следующим образом

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@ id/cardView"
    app:cardUseCompatPadding="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
       <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="625dp"
            android:gravity="center"
            android:orientation="vertical"
            android:padding="24dp">
            <TextView
                android:id="@ id/title"
                style="@style/TextAppearance.AppCompat.Title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/card_title" />

            <TextView
                android:id="@ id/cardBody"
                style="@style/TextAppearance.AppCompat.Body1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="@string/lorem_ipsum" />

            <Button
                android:id="@ id/button"
                style="@style/Widget.AppCompat.Button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="@string/button" />
        </LinearLayout>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top|end"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="-5dp"
            android:src="@drawable/ic_bookmark_24dp"
            android:contentDescription="TODO" />

    </FrameLayout>

</android.support.v7.widget.CardView>
  

мне нужно добавить диаграмму внутри LinearLayout.
макет диаграммы записывается в отдельный XML-файл

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <com.github.mikephil.charting.charts.BarChart
        android:id="@ id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>   
  

Итак, когда я создаю новую карточку, мне нужно указать, какая диаграмма ей принадлежит, я могу себе это представить, поскольку у меня есть заполнитель внутри моей карточки, где я могу выбрать, какая диаграмма будет отображаться в ней.

Как я могу это сделать?

Ответ №1:

Итак, вам нужен прокручивающийся список CardViews ?

Правильным способом добавления нового CardViews было бы использовать RecyclerView резервный массив и пользовательский Adapter . Массив будет содержать элементы пользовательского класса (назовите его CardData ), причем каждый объект в этом классе содержит всю необходимую информацию для заполнения соответствующего ему CardView . RecyclerView Автоматически раздувает каждый CardView макет и заполняет его данными на основе массива.

Попытка добавить эти вещи программно — распространенная ошибка начинающих.