kotlin 是否可以在同一Activity中同时使用Android jetpack Compose视图和xml文件?

klr1opcd  于 2023-11-21  发布在  Kotlin
关注(0)|答案(1)|浏览(148)

我的Android应用遇到了一个问题,我无法在我的supportFragmentActivity子类中使用supportFragmentManager。据我了解,SupportActivity不支持FragmentManager。如果我想使用supportFragmentManagerActivity应该是AppCompatActivity或FragmentActivity的子类。但是,我遇到了一个问题,它似乎是不可用的。我想在我的类中使用JetPack Compose和XML
我一直在关注这个https://stackoverflow.com/a/65653754/3467187

class AbcActivity : ComponentActivity(n) {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_permissio)
    if (savedInstanceState == null) {
         // Here I want to use supposrtFragmentManger
    }
}

字符串
}
Gradle文件看起来像这样,

dependencies {

implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.activity:activity-compose:1.8.0")
..
}


有没有什么想法可以在同一个类中同时使用JetPack Compose和XML,以一种我可以使用片段管理器的方式?

5lhxktic

5lhxktic1#

是的,您可以在XML中使用Compose,反之亦然。
来自this的回答。

方法一

1.将ComposeView添加到您的XML

<androidx.compose.ui.platform.ComposeView
android:id="@+id/my_composable"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

字符串

2.设置活动内容

findViewById<ComposeView>(R.id.my_composable).setContent {
    MaterialTheme {
        Surface {
          Text(text = "Hello!")
        }
    }
}

方法二

可以使用AndroidViewBinding
在使用此方法之前,请阅读以下内容

@Composable
fun AndroidViewBindingExample() {
    AndroidViewBinding(ExampleLayoutBinding::inflate) {
        exampleView.setBackgroundColor(Color.GRAY)
    }
}

编写XML

AndroidView(
    factory = { context ->
        val view = LayoutInflater.from(context).inflate(R.layout.my_layout, null, false)
        val textView = view.findViewById<TextView>(R.id.text)

        // do whatever you want...
        view // return the view
      },
    update = { view ->
    // Update the view
  }
)

相关问题