📑

Jetpack Composeをカスタムビューで使う

2021/08/24に公開

Jetpack Composeをカスタムビューで使ってる例がなかなかなかったので、メモとして残しておきます。


import android.content.Context
import android.util.AttributeSet
import android.widget.FrameLayout
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView

class HogeCustomeView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0,
    defStyleRes: Int = 0
) : FrameLayout(context, attrs, defStyleAttr, defStyleRes) {

    init {
        addView(
            ComposeView(context).apply {
                setContent {
                    MaterialTheme {
                        CustomView()
                    }
                }
            }
        )
    }

    @Composable
    fun CustomView() {
        Text(text = "Hello World", color = Color.Black)
    }
}

これを既存のXMLファイルから使えば、既存プロジェクトのレイアウトの一部だけをJetpack Composeを使うことができます。

<jp.hoge.hoge.mypage.HogeCustomView
   android:layout_width="match_parent"
   android:layout_height="100dp"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintTop_toTopOf="parent"
   app:layout_constraintBottom_toBottomOf="parent"
/>

Discussion