标签: jetpack-compose-accompanist

使用 Coil Compose 加载本地绘图

我最近从 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

4
推荐指数
1
解决办法
5613
查看次数

有没有办法让伴奏库的两个水平寻呼机同步工作?

我想要实现的是,如果有两个水平寻呼机,那么在将顶部一个向左滑动时,底部水平寻呼机应该向右滑动,反之亦然,已尝试使用 pagerState rollBy 方法,但没有获得所需的输出

android android-jetpack-compose jetpack-compose-accompanist

4
推荐指数
1
解决办法
1444
查看次数

意外的锚点值,预计 Compose 应用程序发布版本中会有负锚点

我在我的项目中使用 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

4
推荐指数
1
解决办法
1514
查看次数

伴奏寻呼机 animateScrollToPage 无法正确滚动到下一页

使用accompanist-pagerversion 0.25.1animateScrollToPage()似乎并没有一路滚动以使下一页完全可见,上一页仍然显示。不过,非动画版本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)

截屏

android android-jetpack-compose jetpack-compose-accompanist

4
推荐指数
1
解决办法
3445
查看次数

(撰写 UI)- 键盘 (IME) 与应用程序的内容重叠

几天前,我遇到了一个问题,即我的视图的一部分被键盘重叠。

假设我们有 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

3
推荐指数
1
解决办法
1万
查看次数

伴奏寻呼机“offscreenLimit”已删除。如何禁用附近页面的预加载?

自版本 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)

android android-jetpack-compose jetpack-compose-accompanist

3
推荐指数
1
解决办法
1122
查看次数

将底部填充应用于导航栏

我正在使用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

3
推荐指数
1
解决办法
8157
查看次数

如何在 FlowLayout 中添加行和列之间的间距?

我正在FlowLayout从带有本机 compose v1.4.0 的伴奏库迁移。为了给出列和行之间的间距,我们有FlowCrossAxisAlignmentFlowMainAxisAlignment,但是现在这种方法不可用,在新 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

3
推荐指数
1
解决办法
1753
查看次数

向前导航时如何将底部工作表保留在后退堆栈中?

我在我的项目中使用伴奏底部表目的地。设置与文档中显示的完全相同。

@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

2
推荐指数
1
解决办法
1360
查看次数

当内容伴奏 webview 时,Jetpack Compose TabRow 闪烁

当使用 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

2
推荐指数
1
解决办法
824
查看次数

将导航材质 ModalBottomSheetLayout 扩展到最大或自定义高度

我正在尝试实现https://google.github.io/accompanist/navigation-material/并且我想将模型表扩展到自定义高度或超过半个屏幕,但我不知道如何实现它

当前型号BottomSheet

在此输入图像描述

想要这样扩展

在此输入图像描述

android android-jetpack-compose jetpack-compose-accompanist

1
推荐指数
1
解决办法
3002
查看次数

安卓。作曲、伴奏寻呼机、无限寻呼机如何从特定位置开始寻呼机?

我正在用来com.google.accompanist:accompanist-pager实现页面的无限滚动。我按照 Horizo​​ntalPagerLoopingSample 中的描述实现了所有内容。我需要从第三页开始显示我的寻呼机。但是当我设置initialPage = 2 Horizo​​ntalPager 显示错误的页面。在示例中设置显示第一页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

1
推荐指数
1
解决办法
3345
查看次数