小编ser*_*rov的帖子

Horizo​​ntalPager 与 LazyColumn 位于另一个 LazyColumn 中 - Jetpack Compose

我想要与 TikTok 的个人资料屏幕类似的效果。顶部是ProfilPictureusername,下面是一个stickyHeader带有TabRow( Posts, Drafts, Likes, Favorites) 的 ,下面是HorizontalPager带有 4 个屏幕 ( Posts, Drafts, Likes, Favorites) 的 ,每个屏幕都包含一个列表。

如果我在 Compose 中构建它,我会崩溃,因为我无法将两个嵌套LazyColumns在一起。

这是我尝试做的事情的简短版本:

val tabList = listOf("Posts", "Drafts", "Likes", "Favorites")
val pagerState: PagerState = rememberPagerState(initialPage = 0)
val coroutineScope = rememberCoroutineScope()

LazyColumn(modifier = Modifier.fillMaxSize()) {
    item {
        Box(
            modifier = Modifier
                .fillMaxWidth()
                .height(50.dp),
            contentAlignment = Alignment.Center
        ) {
            //Profile Header (Picture, …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose lazycolumn jetpack-compose-accompanist

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

在 Jetpack Compose 中使用 dp 和 sp 尺寸的最佳实践是什么?

我想了解如何更好地在 Compose 项目中使用 dp 和 sp 值。我检查了几个开源 Compose 项目,其中大多数都对维度进行了硬编码。这绝对不是支持灵活性和不同屏幕尺寸的方法。我目前看到几个方法:

  1. 使用旧方法并dimens.xml直接在调用 的 compose 函数中获取值dimensionResource()
  2. 引用dimens.xmlKotlin 类中 的值。例如:
    class AppDimensions {
        val paddingSmall: Dp
        @Composable
        get() = dimensionResource(R.dimen.padding_small)
    ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 不要针对不同的屏幕尺寸使用dimens.xml并实现自己的逻辑。例如:
    class AppDimensions {
        val paddingSmall = when(screenSize) {
            Compact -> 10.dp
            Medium -> 16.dp
            Expanded -> 20.dp
            else -> 10.dp
        }
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

我喜欢第三种变体,因为它看起来更灵活并且允许我们避免返回 XML。但这需要努力来支持。

但是,也许我们可以以更方便的方式使用它吗?

android dimension android-resources android-jetpack android-jetpack-compose

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