在 Jetpack Compose 中,谁能告诉我有没有办法将 Drawable 对象分配给 Image compose 视图?
我把应用程序安装在 Android 设备上。我得到一个类型为 Drawable 的图标,我想在 Image 中使用它
val icon: Drawable = packageInfor.applicationInfo.loadIcon(packageManager)
Run Code Online (Sandbox Code Playgroud)
我发现有3个函数可以分配图像
- 来自画家 (IdRes)
- 来自图像位图
- 来自图像向量
综上所述,我不知道如何分配一个 Drawable 实例。
我找不到有关此事的任何文档,是否有类似于CollapsingToolbarCompose 中的内容?
我发现的只是这里提到了它,但没有关于如何设置它
很可能是一个新手问题,因为我对 Android 开发相当陌生 - 我在配置更改/导航时在 @Composable 中保留 AndroidView 的状态时遇到麻烦,因为工厂块被调用(如预期)并且我的图表被重新实例化。
@Composable
fun ChartView(viewModel:ViewModel, modifier:Modifier){
val context = LocalContext.current
val chart = remember { DataChart(context) }
AndroidView(
modifier = modifier,
factory = { context ->
Log.d("DEBUGLOG", "chart init")
chart
},
update = { chart ->
Log.d("DEBUGLOG", "chart update")
})
}
Run Code Online (Sandbox Code Playgroud)
这DataChart是一个带有复杂图表的第三方组件,我想保留缩放/滚动状态。我知道我可以使用 ViewModel 来保留 conf 中的 UI 状态。更改,但考虑到保存缩放/滚动状态的复杂性,我想问是否有其他更简单的方法来实现这一点?
我尝试将整个图表实例移动到 viewModel,但由于它使用上下文,我收到有关上下文对象泄漏的警告。
任何帮助,将不胜感激!
我正在寻找 Jetpack Compose TextField 中 EditText 的 InputFilter 的等效方法。
因为我试图阻止用户输入不需要的值,%@*()-例如字符。
android kotlin android-jetpack android-jetpack-compose android-jetpack-compose-text
当我使用 AnimationController 时,它需要一个 vsync 参数。我研究过,我应该使用TickerProviderStateMixin或SingleTickerProviderStateMixin,目前我仍然不知道它们之间有什么区别。谢谢您给我一个解释。参考文献:
https://api.flutter.dev/flutter/widgets/SingleTickerProviderStateMixin-mixin.html
https://api.flutter.dev/flutter/widgets/TickerProviderStateMixin-mixin.html
我试图为填充修饰符分配一个负值,但应用程序崩溃了。看看我的代码。谢谢你,如果你能帮助或给我一个替代的解决方案
在我的示例中,我分配Modifier.padding(horizontal = 16.dp)给父组件 (LazyColum)。但我希望第一个孩子(图像)Modifier.padding(horizontal = -16.dp)填满屏幕的整个宽度。相反,我必须将每个padding值分配给每个孩子。
崩溃日志: java.lang.IllegalArgumentException: Padding must be non-negative
代码片段
LazyColumn(modifier = Modifier.padding(16.dp), state = lazyListState) {
item {
Image(
modifier = Modifier
.fillMaxWidth()
.padding(-16.dp) // Crashed here!
.height(200.dp),
painter = painterResource(id = puppy.artwork),
contentDescription = "Puppy ArtWork",
contentScale = ContentScale.Crop
)
}
item {
Row(
modifier = Modifier
.padding(horizontal = 16.dp)
.padding(top = 16.dp)
) {
Text(text = puppy.name, style = MaterialTheme.typography.h4)
Spacer(modifier = Modifier.weight(1f))
Price(puppy.pricePerHour)
}
}
item …Run Code Online (Sandbox Code Playgroud)