我最近从 Accompanist's 迁移ImagePainter到 Coil's,下面是我更新后的相关代码。
val painter = rememberImagePainter(DRAWABLE_RESOURCE_ID)
when (painter.state) {
is ImagePainter.State.Empty -> Timber.w("Empty")
is ImagePainter.State.Loading -> {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.wrapContentSize()
) {
CircularProgressIndicator()
}
}
is ImagePainter.State.Success -> {
Image(
painter = painter,
contentDescription = null,
contentScale = ContentScale.Fit,
modifier = Modifier
.padding(8.dp)
.size(84.dp)
.clip(RoundedCornerShape(corner = CornerSize(16.dp)))
)
}
is ImagePainter.State.Error -> Timber.e("Error")
}
Run Code Online (Sandbox Code Playgroud)
现在这些图像不会渲染并且painter.state始终为Empty。我的旧版 Accompanist 实现在代码中此时显示了图像。如果我使用 Compose 中的库存,它也可以工作painterResource(resId)。
painter我在通过其状态执行 Coil 的 new …
android android-jetpack-compose coil jetpack-compose-accompanist
我想要实现的是,如果有两个水平寻呼机,那么在将顶部一个向左滑动时,底部水平寻呼机应该向右滑动,反之亦然,已尝试使用 pagerState rollBy 方法,但没有获得所需的输出
我在我的项目中使用 Kotlin 1.6.21、compose 1.2.0-alpha08 和 accompanist 0.24.7-alpha。当使用发布版本(使用和不使用 R8)构建项目时,我的应用程序在启动时立即崩溃,并且我一直无法找到解决方法。我包括一个堆栈跟踪,它几乎不包含我的应用程序代码行。
java.lang.IllegalStateException: Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Unexpected anchor value, expected a negative anchor). Please report to Google or use https://goo.gle/compose-feedback
at androidx.compose.runtime.ComposerKt.composeRuntimeError(Composer.kt:4215)
at androidx.compose.runtime.SlotWriter.moveSlotGapTo(SlotTable.kt:3472)
at androidx.compose.runtime.SlotWriter.insertSlots(SlotTable.kt:2582)
at androidx.compose.runtime.SlotWriter.insertAux(SlotTable.kt:1366)
at androidx.compose.runtime.ComposerImpl.sourceInformation(Composer.kt:3067)
at androidx.compose.runtime.ComposerKt.sourceInformation(Composer.kt:1075)
at androidx.compose.material.ScaffoldKt.rememberScaffoldState(Unknown Source:8)
at com.nek12.test.ui.screens.home.HomeScreenKt.HomeScreen(HomeScreen.kt:54)
at com.nek12.test.ui.screens.destinations.HomeScreenDestination.Content(HomeScreenDestination.kt:26)
at com.ramcosta.composedestinations.animations.AnimatedNavHostEngine.CallComposable(AnimatedNavHostEngine.kt:256)
at com.ramcosta.composedestinations.animations.AnimatedNavHostEngine.access$CallComposable(AnimatedNavHostEngine.kt:57)
at com.ramcosta.composedestinations.animations.AnimatedNavHostEngine$addComposable$1.invoke(AnimatedNavHostEngine.kt:166)
at com.ramcosta.composedestinations.animations.AnimatedNavHostEngine$addComposable$1.invoke(AnimatedNavHostEngine.kt:165)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:135)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at com.google.accompanist.navigation.animation.AnimatedNavHostKt$AnimatedNavHost$9$1.invoke(AnimatedNavHost.kt:212)
at com.google.accompanist.navigation.animation.AnimatedNavHostKt$AnimatedNavHost$9$1.invoke(AnimatedNavHost.kt:210)
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:228)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose jetpack-compose-accompanist
使用accompanist-pagerversion 0.25.1,animateScrollToPage()似乎并没有一路滚动以使下一页完全可见,上一页仍然显示。不过,非动画版本scrollToPage()似乎运行良好。我是否缺少一些额外的参数?
@ExperimentalPagerApi
@Composable
fun MyPager() {
val pagerState = rememberPagerState()
HorizontalPager(
count = 10,
state = pagerState
) { pagerIndex ->
Box(
modifier = Modifier
.fillMaxWidth()
.height(150.dp)
.background(if (pagerIndex.mod(2) == 0) Color.Cyan else Color.Red)
)
}
with(pagerState) {
LaunchedEffect(key1 = currentPage) {
launch {
delay(10000)
animateScrollToPage(
page = (currentPage + 1).mod(pageCount)
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
几天前,我遇到了一个问题,即我的视图的一部分被键盘重叠。
假设我们有 3 个不同的对话框(可以是任何内容),如下所示:
当我想写任何东西时,最后一个对话框被键盘覆盖:
并且无法查看用户写的内容。这是我的代码:
@Composable
fun BuildWordsView(navController: NavController, sharedViewModel: SharedViewModel) {
Column(
modifier = Modifier
.fillMaxWidth()
.background(PrimaryLight)
.fillMaxSize()
) {
BuildWordsScreenContents()
}
}
@Composable
fun BuildWordsScreenContents() {
Column(
Modifier
.fillMaxSize()
.padding(all = 16.dp)
) {
val inputBoxModifier = Modifier
.clip(RoundedCornerShape(10.dp))
.background(Primary)
.weight(12f)
.wrapContentHeight()
InputBlock("Dialog1", inputBoxModifier)
Spacer(Modifier.weight(1f))
InputBlock("Dialog2", inputBoxModifier)
Spacer(Modifier.weight(1f))
InputBlock("Dialog3", inputBoxModifier)
}
}
@Composable
fun InputBlock(dialogText: String, inputBlockModifier: Modifier) {
Column(modifier = inputBlockModifier) {
Text(
dialogText,
fontSize = 30.sp,
textAlign = TextAlign.Center,
modifier = Modifier
.fillMaxWidth()
.wrapContentSize(Alignment.Center)
) …Run Code Online (Sandbox Code Playgroud) android android-layout android-jetpack-compose jetpack-compose-accompanist
自版本 v0.19.0 起;offscreenLimit参数已被删除。如何使用其他技术禁用预加载?
@Composable
fun MyComposable(){
val pagerState = rememberPagerState()
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxSize(),
count = itemList.size,
) { i ->
MyPage(i)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用BottomNavigation来自 Accompanist 的 ,我想将其绘制在导航栏后面。我从中获得了导航栏插图WindowInsets.navigationBars.getBottom,但该值太高并且产生了很大的间隙(参见图片)。如何获得导航栏的正确内容填充?
这是代码
@Composable
fun NavigationBar(
navController: NavHostController,
modifier: Modifier = Modifier,
) {
val density = LocalDensity.current
val bottomPadding = WindowInsets.navigationBars.getBottom(density).dp
BottomNavigation(
modifier = modifier,
contentPadding = PaddingValues(bottom = bottomPadding),
) {
// content omitted for brevity
}
}
Run Code Online (Sandbox Code Playgroud)
windowinsets android-jetpack-compose jetpack-compose-accompanist
我正在FlowLayout从带有本机 compose v1.4.0 的伴奏库迁移。为了给出列和行之间的间距,我们有FlowCrossAxisAlignment和FlowMainAxisAlignment,但是现在这种方法不可用,在新 api 中的垂直轴上FlowRow我们可以使用,Arrangement.spacedBy(16.dp)但其他轴没有类似的东西,他们给出的解决方案是放置底部填充在每个元素上,但这也适用于最后一行。有解决办法吗?
问题: https: //issuetracker.google.com/issues/268365538
这是我的代码和结果:
FlowRow(modifier = modifier.background(color =Color.Blue), horizontalArrangement = Arrangement.spacedBy(16.dp)) {
chips.forEach { chip ->
Chip(
modifier = Modifier.background(color = Color.Cyan).padding(bottom = 16.dp),
label = chip.label
)
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在底部看到的,生成了青色填充,这就是我想要避免的
编辑:问题报告中的提案似乎已被接受,他们将在下一个版本中添加该功能。
android flowlayout android-jetpack-compose jetpack-compose-accompanist
我在我的项目中使用伴奏底部表目的地。设置与文档中显示的完全相同。
@Composable
fun MyApp() {
val bottomSheetNavigator = rememberBottomSheetNavigator()
val navController = rememberNavController(bottomSheetNavigator)
ModalBottomSheetLayout(bottomSheetNavigator) {
NavHost(navController, Destinations.Home) {
composable(route = "home") {
HomeScreen(
openBottomSheet = { navController.navigate("sheet") }
)
}
bottomSheet(route = "sheet") {
MyBottonSheet(
navigateToSomeRoute = { navController.navigate("some_route") }
)
}
composable(route = "some_route") {
SomeComposable(
onBackPress = { navController.navigateUp() }
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyBottomSheet这里我有一个打开屏幕的按钮SomeComposable。但是当我从那里向上导航时,我到达了HomeScreen即当我导航离开底部工作表时,底部工作表从后堆栈中弹出。如何将底部工作表保留在后堆栈中,以便当我按“后退”键时SomeComposable返回到打开状态MyBottonSheet(位于 顶部HomeScreen)的上一个状态?
android kotlin android-jetpack-navigation android-jetpack-compose jetpack-compose-accompanist
当使用 webview 作为内容的 compose tabBar 实现时,我遇到闪烁或重叠。如果我用另一个视图(例如 Box{Text})更改网络视图,则不会发生这种情况。
似乎 web 视图在短时间内填充的内容超过了边框(请参见下面的 .gif)
更新:我一直在研究这是否是一个重组问题(因此是简单的测试项目),并且我无法确定它应该重组选项卡栏的任何原因。当我向选项卡栏添加高度时,我可以看到文本始终位于选项卡栏中。
可以在此处获取测试项目: https: //github.com/msuhl/ComposeTabTest,它是一个非常标准的实现
@Composable
private fun MyTabRow(
pagerState: PagerState,
coroutineScope: CoroutineScope,
) {
TabRow(
selectedTabIndex = pagerState.currentPage,
indicator = { tabPositions ->
TabRowDefaults.Indicator(
Modifier.pagerTabIndicatorOffset(pagerState, tabPositions),
color = MaterialTheme.colors.secondary
)
},
) {
tabRowItems.forEachIndexed { index, item ->
Tab(
selected = pagerState.currentPage == index,
onClick = { coroutineScope.launch { pagerState.animateScrollToPage(index) } },
icon = {
Icon(imageVector = item.icon, contentDescription = "")
},
text = {
Text(
text = …Run Code Online (Sandbox Code Playgroud) android-tabs android-jetpack-compose jetpack-compose-accompanist
我正在尝试实现https://google.github.io/accompanist/navigation-material/并且我想将模型表扩展到自定义高度或超过半个屏幕,但我不知道如何实现它
当前型号BottomSheet
想要这样扩展
我正在用来com.google.accompanist:accompanist-pager实现页面的无限滚动。我按照 HorizontalPagerLoopingSample 中的描述实现了所有内容。我需要从第三页开始显示我的寻呼机。但是当我设置initialPage = 2 HorizontalPager 显示错误的页面。在示例中设置显示第一页initalPage = Int.MAX_VALUE / 2。是否可以用无限寻呼机计算真实的具体位置?
我尝试做这样的事情:
val positionFromIWantToStart = 2
val startIndex = (Int.MAX_VALUE / 2) + positionFromIWantToStart
val pagerState = rememberPagerState(initialPage = startIndex)
Run Code Online (Sandbox Code Playgroud)
但这工作不正确,HorizontalPager总是显示第一页。
请帮我。
android infinite-scroll android-viewpager android-jetpack-compose jetpack-compose-accompanist
jetpack-compose-accompanist ×12
android ×10
kotlin ×2
android-tabs ×1
coil ×1
flowlayout ×1
windowinsets ×1