如何在Jetpack Compose中获取android.R.attr.*属性的值?
在Jetpack Compose中获取dialogPreferredPadding属性值
之前在XML布局里,我用android:padding="?dialogPreferredPadding"设置对话框内容的首选内边距,该属性定义如下:
<!-- Preferred padding for dialog content. --> <attr name="dialogPreferredPadding" format="dimension" />
代码里能通过android.R.attr.dialogPreferredPadding找到这个属性,但不清楚怎么在Jetpack Compose中获取它的值,应用到如下代码的padding中:
Row( modifier = Modifier .padding( <use dialogPreferredPadding here> ) )
解决方法
有两种简洁的实现方式:
方法1:使用dimensionResource(推荐)
Compose的dimensionResource支持直接解析主题属性,传入系统属性ID即可:
Row( modifier = Modifier .padding(dimensionResource(id = android.R.attr.dialogPreferredPadding)) ) { // 你的Row内容 }
方法2:通过主题属性手动获取
如果需要更灵活的处理逻辑,可以通过Context从当前主题中提取属性值:
val context = LocalContext.current // 从主题中获取属性维度值,转换为Compose的Dp类型 val dialogPadding = with(context.theme) { obtainStyledAttributes(intArrayOf(android.R.attr.dialogPreferredPadding)).use { typedArray -> typedArray.getDimension(0, 0f).dp } } Row( modifier = Modifier .padding(dialogPadding) ) { // 你的Row内容 }
这里用use函数自动释放TypedArray避免内存泄漏,getDimension返回像素维度后,通过.dp扩展转换为Compose适配的Dp单位。
内容的提问来源于stack exchange,提问作者t0m
相关产品推荐
相关产品推荐

