Android: cómo insertar la interfaz de usuario de Compose en xml tradicional Android View-JLin


Si desea utilizar el diseño de Compose Ui, pero no desea cambiar a la arquitectura del código del programa original por el momento (tal vez debido a una clase BaseActivity), coloque la interfaz de usuario de Compose escrita en el círculo, solo por teniendo setContent {} Método para poner la composición en él
Hay algunos puntos importantes
- Debe ser AppCompatActivity
- No puede utilizar actividades tradicionales.
Entonces usa una palabra clave
ComposeView
Luego declara uno en xml
xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> android:id="@+id/composeView"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
Luego, el enlace de datos generará una clase LayoutComposeBinding
Ejecutar a través de
private fun getComposeView() = LayoutComposeBinding.inflate(LayoutInflater.from(context)).run {
composeView.setContent {
CircularProgressBarDemo()
}
root
}
Puede obtener esta opinión generada por redactar Se dice que la historia de Android View se puede expresar libremente.
Este ejemplo es un fragmento de conversación, por lo que casi
class ProgressBarDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?) = activity?.let{
isCancelable = false
AlertDialog.Builder(it).apply {
setView(getComposeView())
setCancelable(false)
}.create()
} ?: throw IllegalStateException("Activity can not be null")private fun getComposeView() = LayoutComposeBinding.inflate(LayoutInflater.from(context)).run {
composeView.setContent {
CircularProgressBarDemo()
}
root
}
@Composable
fun CircularProgressBarDemo(message :String? = null) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
CircularProgressIndicator()
Text(text = message ?: "Loading")
}
}
}
¿Qué tal usarlo en actividades?
De acuerdo con lo anterior, debe ser una AppCompatActivity y su FragmentActivity
ProgressBarDialog()
.show(supportFragmentManager, null)
¡Terminar!