小编Waf*_*_ck的帖子

如何调整 LazyVerticalGrid 中项目的高度?

我用来LazyVerticalGrid显示项目列表。

LazyVerticalGrid(
            cells = GridCells.Fixed(2),
            modifier = Modifier.fillMaxSize(),
            state = listState,
            content = {
                    Box(modifier = boxModifier) {
                        ProductItemView(
                            item = items[index]
                        )
                    }
                }
            }
        )
Run Code Online (Sandbox Code Playgroud)

有时我的一些物品比旁边的物品高(附件) 在此输入图像描述

如何调整所有项目的高度?或者我应该使用VerticalGrid() 之外的其他东西?

android kotlin android-jetpack android-jetpack-compose

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

Compose 预览根本不起作用 - 项目需要编译

我使用的是2022年3月16日构建的Android Studio Bumblebee 2021.1.1 Patch 3

androidx.compose.ui:ui-tooling, androidx.compose.ui:ui-tooling-preview, androidx.compose.ui:ui 版本1.2.0-alpha07

我想创建可组合项的预览,但无法创建任何一个。每次我看到错误:“需要编译项目才能显示预览”时,我都会重建、同步项目并重新启动 Android Studio,但这没有帮助。有什么问题吗?

例如我的可组合项:

@Composable
fun DefaultProfileAvatarBox(
    modifier: Modifier = Modifier
        .size(60.dp),
    firstLetter: String
) {
    val finalModifier = modifier
        .clip(CircleShape)
        .background(blueAvatarBackground)

    Box(
        modifier = finalModifier
    ) {
        Text(
            text = firstLetter,
            modifier = Modifier
                .padding(bottom = 2.dp)
                .align(Alignment.Center),
            fontSize = 32.sp,
            fontWeight = FontWeight.SemiBold,
            color = Color.White,
            textAlign = TextAlign.Center
        )
    }
}

@Preview
@Composable
fun DefaultProfileAvatarBoxPreview() {
    DefaultProfileAvatarBox(firstLetter = "K")
}
Run Code Online (Sandbox Code Playgroud)

android kotlin firebase android-jetpack android-jetpack-compose

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

将 viewModel 注入到 @Composable

我的 ProfileScreen 有 viewModel。

@Composable
fun ProfileScreen() {
    val viewModel: ProfileViewModel = viewModel()
    ...
}
Run Code Online (Sandbox Code Playgroud)

每次我调用 ProfileScreen 时,都会创建新的 viewModel。我如何为我的 ProfileScreen 只创建一个 viewModel 实例。我尝试按照https://insert-koin.io/docs/reference/koin-android/compose/注入 viewModel但当我尝试时

val viewModel: ProfileViewModel = viewModel()

Android Studio 抛出错误。

android dependency-injection kotlin koin android-jetpack-compose

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

减少撰写按钮内的填充

如何减少按钮内的填充?我希望文本更靠近按钮边缘

Button(
        onClick = {},
        modifier = Modifier.padding(0.dp),
        shape = RoundedCornerShape(30.dp),
        border = BorderStroke(1.dp, Color(0xFFC4C4C4)),
        colors = ButtonDefaults.buttonColors(
            contentColor = MaterialTheme.colors.onBackground,
            backgroundColor = MaterialTheme.colors.onBackground
        )
    ) {
        Text(
            text = "lorem ipsu",
            fontSize = 13.sp,
            textAlign = TextAlign.Center,
            modifier = Modifier.padding(start = 1.dp, end = 1.dp)
        )

}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

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

Jetpack Compose 中没有连锁反应

当我点击“我已将 MyTheme(){} 添加到主 @Composable 屏幕”时,没有任何连锁反应,MyBox()但它不起作用。是不是少了什么?

@Composable
private MyBox(onClickInvoked: () -> Unit) {
    MyAppTheme(isSystemInDarkTheme()) {
        Box(
            modifier = Modifier
                .fillMaxWidth()
                .wrapContentHeight()
                .clip(RoundedCornerShape(10.dp))
                .background(MaterialTheme.colors.onBackground)
                .clickable(onClick = { onClickInvoked.invoke() })
                .padding(horizontal = 10.dp, vertical = 15.dp)
        ) {
            Text(
                text = "My text",
                modifier = Modifier
                    .align(Alignment.CenterStart)
                    .padding(end = 95.dp)
                    .wrapContentWidth()
                    .wrapContentHeight(),
                color = MaterialTheme.colors.primary
            )
            Image(
                painter = painterResource(R.drawable.icon),
                modifier = Modifier
                    .align(Alignment.CenterEnd)
                    .padding(end = 20.dp)
                    .size(60.dp)
            )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-compose

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

如何更改Android Studio中的JDK位置?

当我在 Android Studio 中打开项目时,我看到默认的 JDK https://i.stack.imgur.com/XP8HN.png

我去设置并尝试更改jdk,但它没有保存。Android Studio 中仍然显示之前的路径 在此输入图像描述

我看到其他线程,我的路径之一不包含 s 空格。

我应该更改 gradle.kts 文件中的某些内容吗?

java windows android kotlin android-studio

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

使用 Jetpack Compose 将文本换行到下一行

在此输入图像描述我创建了一个约束布局

 ConstraintLayout(
        Modifier
            .fillMaxWidth()
            .wrapContentHeight()
    ) {

        Image(
            painter = rememberImagePainter(it.photoUrl.toString()),
            modifier = Modifier
                .constrainAs(photo) {
                    start.linkTo(parent.start, margin = 30.dp)
                    top.linkTo(parent.top, margin = 30.dp)
                }
                .width(130.dp)
        )

        Column(
            modifier = Modifier
                .constrainAs(holder) {
                    start.linkTo(photo.end, margin = 30.dp)
                    top.linkTo(photo.top)
                    bottom.linkTo(photo.bottom)
                    end.linkTo(parent.end, margin = 30.dp)
                }
                .fillMaxWidth()
                .wrapContentHeight(),
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text(
                modifier = Modifier
                    .wrapContentWidth()
                    .wrapContentHeight(),
                text = "Lorem Ipsu auto text  ator..."
            )
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,长文本无法适应布局。如何将文本换行到下一行?我尝试将 wrapContentWidht() 更改为 fillMaxParentWidth 但 id 没有帮助。

android kotlin android-jetpack android-jetpack-compose

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

在 Jetpack Compose 中动态更改图标

我有两个“喜欢”按钮的图标 -ic_thumb_upic_thumb_up_selected

图标的类型应取决于offer.likedByUser参数。

var thumbIcon by remember {
    mutableStateOf(if (offer.likedByUser) R.drawable.ic_thumb_up_selected else R.drawable.ic_thumb_up)
}

IconButton(
    onClick = {
        offer.likedByUser = !offer.likedByUser
    } 
) {
    Image(painter = painterResource(id = thumbIcon) )
}
Run Code Online (Sandbox Code Playgroud)

为什么它不起作用?

android kotlin android-jetpack-compose

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

盒子未填充最大尺寸 - Jetpack Compose

PersonalDataBox()即使有,我的也没有填满最大可用空间.fillMaxSize()

我的盒子和屏幕底部之间有一个空白区域。我想用 Box() 填满整个屏幕。看起来我的盒子有 .fillWrapHeight()。盒子的父级也是 .fillMaxSize() 并且它工作正常 - 填充最大高度。

@Composable
private fun PersonalDataBox(user: User) {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .padding(vertical = 10.dp)
            .clip(RoundedCornerShape(topStart = 10.dp, topEnd = 10.dp))
            .background(Color.Red)
            .padding(horizontal = 25.dp, vertical = 15.dp)
    ) {
        Column(modifier = Modifier.fillMaxSize()) {
            Text(
                text = stringResource(R.string.personal_data),
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(top = 10.dp),
                fontSize = 16.sp,
                fontWeight = FontWeight.SemiBold,
                color = MaterialTheme.colors.primary
            )
            listOf(
                Pair(stringResource(R.string.name), user.name),
                Pair(stringResource(R.string.surname), user.surname),
                Pair(stringResource(R.string.e_mail), user.email),
            ).forEach {
                InputField(it)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack android-jetpack-compose

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

如何在 Jetpack compose 中检测 Horizo​​ntalPager 中的滑动?

我如何检测用户何时从一个选项卡滑动到第二个选项卡等HorizontalPager()?

val pagerState = rememberPagerState(initialPage = 0)
HorizontalPager(count = TabCategory.values().size, state = pagerState) { index ->
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.onBackground)
    ) {
        when (TabCategory.values()[index]) {
            TabCategory.Opinion -> { }
            TabCategory.Information -> { }
            TabCategory.Videos -> { }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-layout kotlin android-jetpack android-jetpack-compose

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

对齐框中的项目 [Jetpack Compose]

我正在尝试设置ic_remove_selected_photo在盒子的顶端

在此输入图像描述

我所取得的成就:

在此输入图像描述

代码:

Box(modifier = Modifier.size(90.dp).padding(7.dp)) {
    Image(
        bitmap = bitmap.asImageBitmap(),
        modifier = Modifier
            .size(80.dp)
            .clip(RoundedCornerShape(6.dp)),
        contentScale = ContentScale.Crop,
    )

    IconButton(modifier = Modifier.align(Alignment.TopEnd).size(10.dp)) {
        Icon(painter = painterResource(id = R.drawable.ic_remove_selected_photo))
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何remove icon在图像上设置?

android kotlin android-jetpack-compose

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

如何显示具体的商品数量?

我想创建一个带有可以左右滚动(从右侧开始)的图表的视图。我已经使用 LazyRow 完成了此操作并将reverseLayout 设置为true。

val scrollState = rememberLazyListState(0)

LazyRow(
    reverseLayout = true,
    state = scrollState
) {
    items(charts) {data ->
        ChartBar()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的图表是可交换的并且显示正确。

我的问题是我需要始终在屏幕宽度上显示 7 个条形,同时保持水平填充。我不知道如何计算。

第二个问题是检测滑动后新条何时比之前的条更高,然后触发操作。我也不知道该怎么做。

我需要为此使用 Layout() 和 Measurables 吗? 在此输入图像描述

android kotlin android-jetpack android-jetpack-compose

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

LaunchedEffect 没有延迟时应用程序崩溃

为什么我的应用程序在运行此代码时崩溃:

val scrollState = rememberLazyListState(0)
var isLastItemVisible by remember { mutableStateOf(false) }

LaunchedEffect(scrollState) {
    while (!isLastItemVisible) {
        val lastVisibleItemIndex = scrollState.layoutInfo.visibleItemsInfo.lastOrNull()?.index
        val totalItemsCount = scrollState.layoutInfo.totalItemsCount
        isLastItemVisible = lastVisibleItemIndex != null && lastVisibleItemIndex == totalItemsCount - 1
    }

    onLastItemSeen()
}
Run Code Online (Sandbox Code Playgroud)

当我在循环的最后一行添加任何延迟时,一切都正确。我在 LazyRow 中显示项目。

android kotlin android-jetpack android-jetpack-compose

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