Generalidades

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

Lin Junjie

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

  1. Debe ser AppCompatActivity
  2. 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!

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba