나는 컴파운드 뷰를 좋아한다

5791 단어 androidxml
저는 UI의 일부를 복합 보기로 분리하는 것을 좋아합니다.
먼저 여기에서 수행하는 방법입니다.
정상적으로 xml에 뷰를 생성하고,

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="40dp"
    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
    android:layout_height="76dp"
    >
    <TextView
        tools:text="سبت"
        android:fontFamily="@font/neo_sans_arabic"
        android:textStyle="bold"
        android:textColor="#FE000000"
        android:id="@+id/dayNameTextView"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</merge>


보시다시피 상위 태그는 상위 태그로 팽창시킬 위치를 가져갈 것입니다.
ConstraintLayout을 확장하고 viewBinding을 사용하여 무효화하는 새 클래스를 만듭니다.

class PlanDayView(context: Context, attributeSet: AttributeSet?=null) :
    ConstraintLayout(context, attributeSet) {
    var binding: FoodPlansDayBinding

    init {
        inflate(context, R.layout.food_plans_day, this)
        binding = FoodPlansDayBinding.bind(this)
    }


    fun render(uiDayView: UiDayView) {
           TODO("")
    }

}


그런 다음 이 복합 보기를 나타내는 모델을 만듭니다.

data class UiDayView(
    val name: String,
    val number: String,
    val progress: Int,
    val isPassedOrToday: Boolean,
    val isFree: Boolean = false,
    val isSelected: Boolean = false,
    val onClick: (UiDayView)-> Unit,
)


이제 일반 보기와 같이 xml에서 이것을 사용할 수 있습니다.
또는 코드에서

val view = PlanDayView(context)


여기에서 컴파운드를 만들고 UiModel을 만들고 UI 조각을 분리했습니다.
viewHolder에서 이것을 어떻게 사용하는지 질문입니다.

좋은 웹페이지 즐겨찾기