You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jetpack Compose的AndroidView中使用style样式属性?

问题原因

你提供的代码无法运行的核心原因有两点:

  • 原生Android View的style属性不支持实例化完成后动态赋值,只能在View构造阶段指定
  • @style/button_style是XML布局专用的资源引用写法,不能直接在Kotlin/Java代码中使用,代码中引用style资源需要用R.style.button_style格式的资源ID
正确实现方案

方案1:构造View时直接传入style资源ID

在Button的构造方法第四个参数传入对应的style资源ID即可:

AndroidView(factory = { context ->
    Button(context, null, 0, R.style.button_style).apply {
        text = "Turn On"
    }
})

注意:该写法要求minSdk >= 21,如果你的应用需要兼容更低版本,使用方案2。

方案2:使用ContextThemeWrapper包装上下文

通过主题包装器给上下文提前绑定style,再用该上下文构造View,全版本兼容:

AndroidView(factory = { context ->
    val themedContext = ContextThemeWrapper(context, R.style.button_style)
    Button(themedContext).apply {
        text = "Turn On"
    }
})
注意事项
  • 构造View时请使用当前Activity的Context,不要直接传入Application Context,避免style中的主题属性无法正确匹配
  • 如果style中包含仅在XML布局中生效的自定义属性,需要单独在apply代码块中手动赋值

内容的提问来源于stack exchange,提问作者Android Newcomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:48:03