将视图系统中的应用程序迁移到 Jetpack compose。
底部稀松布颜色显示在当前应用程序的状态栏上。
如何在 Jetpack compose 中重现相同的内容?
使用视图的应用程序的屏幕截图
使用撰写的应用程序的屏幕截图
编写代码
val modalBottomSheetState = rememberModalBottomSheetState(
initialValue = ModalBottomSheetValue.Hidden,
)
val coroutineScope = rememberCoroutineScope()
ModalBottomSheetLayout(
sheetState = modalBottomSheetState,
sheetContent = {
// Not relevant
},
) {
Scaffold(
scaffoldState = scaffoldState,
topBar = {
// Not relevant
},
floatingActionButton = {
FloatingActionButton(
onClick = {
coroutineScope.launch {
if (!modalBottomSheetState.isAnimationRunning) {
if (modalBottomSheetState.isVisible) {
modalBottomSheetState.hide()
} else {
modalBottomSheetState.show()
}
}
}
},
) {
Icon(
imageVector = Icons.Rounded.Add,
contentDescription …
Run Code Online (Sandbox Code Playgroud) 对于LazyRow
, 或Column
,如何知道用户是否向左或向右滚动(或向上或......你知道)。对于类似的东西,我们不需要在 compose 中回调,因为mutableStateOf
对象总是会触发重组,所以我只是想知道一种将其存储在变量中的方法。好的,有lazyRowState.firstVisibleItemScrollOffset
,它可以用来以某种方式测量它,但我找不到一种方法来首先存储它的值,然后减去当前值来检索方向(基于正或负变化)。关于如何做到这一点的任何想法,谢谢
android android-jetpack-compose android-jetpack-compose-list
我无法在 Studio 中预览任何内容,无法预览像Text
. 我收到“渲染错误”,显示了该堆栈跟踪。
java.lang.NoSuchMethodException: com.<packageName>.Navigation_ComponentsKt.<PreviewName>
at androidx.compose.ui.tooling.CommonPreviewUtils.findComposableMethod(CommonPreviewUtils.kt:78)
at androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection$ui_tooling_release(CommonPreviewUtils.kt:183)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:553)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:551)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1.invoke(ComposeViewAdapter.kt:590)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1.invoke(ComposeViewAdapter.kt:546)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.tooling.InspectableKt.Inspectable(Inspectable.kt:64)
at androidx.compose.ui.tooling.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:495)
at androidx.compose.ui.tooling.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:494)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.tooling.ComposeViewAdapter.WrapPreview(ComposeViewAdapter.kt:490)
at androidx.compose.ui.tooling.ComposeViewAdapter.access$WrapPreview(ComposeViewAdapter.kt:120)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:546)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:543)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:384)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:228)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:227)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:148)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:114)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:113)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:106)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:162)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:161) …
Run Code Online (Sandbox Code Playgroud) android-studio android-gradle-plugin android-jetpack-compose android-jetpack-compose-preview
我刚刚创建了一个简单的 Composable 并希望使用 a 来渲染它Layout
,但是在实现解决方案时,我在测量阶段偶然发现了这个错误。
java.lang.IllegalArgumentException: Can't represent a size of 214748364 in Constraints
at androidx.compose.ui.unit.Constraints$Companion.bitsNeedForSize(Constraints.kt:408)
at androidx.compose.ui.unit.Constraints$Companion.createConstraints-Zbe2FdA$ui_unit_release(Constraints.kt:368)
at androidx.compose.ui.unit.ConstraintsKt.Constraints(Constraints.kt:438)
at androidx.compose.ui.unit.ConstraintsKt.Constraints$default(Constraints.kt:423)
at com.gmarsk.aiare.MainActivity$InstructionsScreen$DisplayCard$1.measure-3p2s80s(MainActivity.kt:514)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:54)
Run Code Online (Sandbox Code Playgroud)
这是我尝试这个的时候
val sampleComposable = measurables[1].measure(
Constraints(
minHeight = constraints.maxHeight * 7 / 10,
)
)
Run Code Online (Sandbox Code Playgroud)
有人以前偶然发现过这个吗?如果不是错误,有什么解决方案,请告诉我。
现在,我认为这里的问题是我嵌套了两个Layout
可组合项,
Layout(
content = {
Dummy1()
Dummy2()
NestedLayoutComposable() // It contains a Layout Composable itself
}{ measurables, constraints ->
val nlc = measurables[2].measure(
Constraints(
minHeight = constraints.maxHeight * 7/10
)
)
layout(constraints.maxWidth, constraints.maxHeight){
nls.place(0, …
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-layout
我们可以Path
使用此处绘制 s Canvas
,但我想知道是否可以绘制一个不规则的闭合环,然后将背景应用到环的内部。例如,可以只有一个框,填充到屏幕上,具有白色背景,然后我绘制一个形状(本质上是一个循环)。现在我怎样才能仅将红色背景应用于循环捕获的区域?可组合项本质上似乎是直的,所以这似乎是不可能的。
这个问题以前已经被问过,但以不同的形式,关于一些特定的用例,到目前为止还没有答案。我终于让它工作了,所以我在这里分享这个,但是这不应该被标记为重复,因为前面的所有问题都指定了特定的东西,比如Columns
with scrollable
Modifiers
, or LazyRows
,但这将解决一般的所有问题,我的意思是所有惰性滚动器,甚至希望甚至是可滚动的容器。我将发布答案,这只是我希望与社区分享的一段知识,当然,欢迎任何改进。
android state android-jetpack-compose android-jetpack-compose-list android-jetpack-compose-modifier
我有一个简单的Box
可组合项,我想将其剪辑为自定义形状,但每当我尝试它时,形状的大小仍然非常僵硬且很小。我尝试使用在路径级别上进行缩放Matrix()
,但无济于事。这是示例 -
const val clockHand = "M0 80.52L2 86l2-5.48V2.74C4 1.83 3.6 0 2 0S0 1.83 0 2.74v77.78Z"
val clockHandShape = object : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline {
return Outline.Generic(PathParser.createPathFromPathData(clockHand).asComposePath())
}
}
Box(
modifier = Modifier
.background(Color.Green)
.clip(clockHandShape)
.width(30.dp)
.height(50.dp)
.background(Color(0xFFFF007A))
.layoutId("hourHand")
) {}
Run Code Online (Sandbox Code Playgroud)
作为一种控件,您可以用预定义的形状替换自定义形状,例如RectangleShape
等CircleShape
。
我想在我的TextField
焦点增益上触发一个功能,但我找不到类似监听器的东西。
android ×7
android-jetpack-compose-list ×2
android-jetpack-compose-layout ×1
android-jetpack-compose-modifier ×1
android-jetpack-compose-preview ×1
bottom-sheet ×1
canvas ×1
clip ×1
layout ×1
state ×1