import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
class ComposeInteropScreen : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ComposeInteropContent()
}
}
}
@Composable
fun ComposeInteropContent() {
val context = LocalContext.current
Column(modifier = Modifier.padding(16.dp)) {
Text(text = "Hello from Compose!")
AndroidView(factory = { ctx ->
Button(ctx).apply {
text = "Click Me"
setOnClickListener {
Toast.makeText(ctx, "Button clicked!", Toast.LENGTH_SHORT).show()
}
}
}, modifier = Modifier.padding(top = 16.dp))
}
}This solution uses the AndroidView composable to embed a traditional Android Button inside a Compose layout.
The factory lambda creates the Button and sets its label to "Click Me".
We add a click listener to show a Toast message when the button is tapped.
This shows how Compose can interoperate with existing Android Views easily.