标签: android-jetpack-compose

未使用内容填充参数

我最近开始使用 Jetpack Compose。我有以下可组合项:

@Composable
fun SearchScreen(navController: NavHostController) {
    Scaffold(
        topBar = { SearchBar() },
        content = {
            Column (
                modifier = Modifier.fillMaxSize()
            ) {
                // some nested Composables
            }
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

但按原样使用此代码,其中的整个代码content = {...}都用红色下划线表示Jetpack Compose: Content padding parameter it is not used。我已经在这篇Stackoverflow 帖子中读到,实际上,PaddingValues只有在设置了 的情况下才在脚手架中提供bottomBar,这显然不是这里的情况。所以我不明白为什么我会收到这个错误。

注意:该应用程序实际上确实使用了 a BottomNavigation,但不在Composable我上面显示的范围内。难道这仍然以某种方式在这里传播吗?

android android-jetpack-compose jetpack-compose-navigation

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

Jetpack Compose 中的屏幕宽度和高度

我想知道如何使用 Jetpack Compose 获取屏幕宽度和高度?

除了 之外,还有什么方法可以检索屏幕尺寸吗 getWindowManager().getDefaultDisplay()

android android-jetpack-compose

103
推荐指数
4
解决办法
8万
查看次数

使用 Jetpack Compose clickable-Modifier 时,为什么会出现后端内部错误:“IR 降低错误期间出现异常”?

我正在创建一个自定义,Checkbox其中SurfaceModifier.clickable

    Surface(
        modifier = Modifier
            .clickable(
                enabled = enabled,
                interactionSource = interactionSource,
                indication = rememberRipple(),
                role = Role.Checkbox,
                onClick = { onCheckedChange(!checked) }
            )
            .then(modifier),
    ) {
        Row {
            Checkbox(checked = checked, onCheckedChange = {}, colors = colors)
            Text(text = text ?: "")
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试构建它时,我收到错误Exception during IR lowering error

org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: /home/rene/AndroidStudioProjects/pass13/app/src/main/java/com/aresid/simplepasswordgeneratorapp/ui/widgets/Checkbox.kt
Run Code Online (Sandbox Code Playgroud)

请参阅此处的完整堆栈跟踪。

删除Modifier.clickable可以解决构建问题。

我已经尝试过升级/降级某些版本,但没有任何东西可以正常工作。
目前,我正在使用这些版本:

    ext.versions = [ …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

76
推荐指数
5
解决办法
5万
查看次数

类型 'State<List<User>?>' 没有方法 'getValue(Nothing?, KProperty<*>)',因此它不能作为委托

我正在尝试使用 jetpack compose 中的 observeAsState 从 LiveData 获取值,但我收到一个奇怪的错误

类型 'State<List?>' 没有方法 'getValue(Nothing?, KProperty<*>)',因此它不能作为委托

代码

@Composable
fun UserScreen(userViewModel:UserViewModel){
    val items: List<User> by userViewModel.fetchUserList.observeAsState()
    UserList(userList = items)
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

视图模型

class UserViewModel: ViewModel() {

    private val dataSource = UserDataSource()
    val fetchUserList = liveData {
        emit(dataSource.dummyUserList)
    }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-compose

68
推荐指数
8
解决办法
8719
查看次数

删除 jetpack 撰写文本字段上的默认填充

我想TextField在 Jetpack Compose 中自定义可组合项。我试图实现下图中的结果,但不知何故TextField有一些默认填充,我找不到如何更改其值。我想删除默认填充并自定义它

(右边的图像是我实现的结果。我画了一个边框,这样你就可以看到它有填充,顺便说一句,下面的TextField只是Text可组合项,它们不是TextFields

在此输入图像描述 在此输入图像描述

下面是我的TextField代码

TextField(
    value = "",
    onValueChange = {},
    modifier = Modifier
        .weight(1F)
        .padding(0.dp)
        .border(width = 1.dp, color = Color.Red),
    placeholder = {
        Text(
            "5555 5555 5555 5555", style = TextStyle(
                color = Color.Gray
            )
        )
    },
    colors = TextFieldDefaults.textFieldColors(
        backgroundColor = Color.Transparent,
        unfocusedIndicatorColor = Color.Transparent,
        focusedIndicatorColor = Color.Transparent
    ),
)
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

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

Compose-Navigation:在导航之前从堆栈中删除以前的可组合项

我正在使用compose-navigation(alpha09) 来处理可组合项之间的导航

我想在移动到下一个目的地时删除启动屏幕(我不希望按下后背返回启动屏幕)

以下尝试未按预期工作:

navHostController.navigate(Route.login.id) {
    navHostController.graph.clear()
}
Run Code Online (Sandbox Code Playgroud)
navHostController.navigate(Route.login.id)
navHostController.graph.clear()
Run Code Online (Sandbox Code Playgroud)
val currentDest = navHostController.currentDestination
navHostController.navigate(Route.login.id)
if (currentDest != null) {
   navHostController.graph.remove(currentDest)
}
Run Code Online (Sandbox Code Playgroud)

那么如何删除启动屏幕然后转到下一步呢?

android android-jetpack-navigation android-jetpack-compose jetpack-compose-navigation

65
推荐指数
5
解决办法
4万
查看次数

如何创建一个 Jetpack Compose Column,其中中间的子项可滚动,但所有其他子项始终可见?

我正在创建一个 Jetpack Compose 对话框,其中包含一个列,其中所有元素都应始终可见,但第三个元素除外,第三个元素是一个文本,如果文本不适合屏幕空间,则该文本应该是可滚动的。我几乎通过仅用于该文本元素的辅助可滚动列实现了这一点。但是,如果有大量文本,此实现会将底部子项(按钮)推到视图之外。这是我的代码:

@Composable
fun WelcomeView(
    viewModel: WelcomeViewModel,
    onDismiss: () -> Unit
) {
    Dialog(onDismissRequest = onDismiss) {
        Box(
            modifier = Modifier
                .clip(RoundedCornerShape(Spacing.extraLarge))
                .background(Colors.backgroundBase)
                .padding(all = Spacing.medium)
        ) {
            Column {
                IconView(
                    name = IconViewNames.RUNNING_SHOE,
                    size = IconViewSizes.LARGE,
                    color = Colors.primaryBase
                )

                Text(
                    viewModel.title,
                    style = Text.themeBillboard,
                    modifier = Modifier.padding(bottom = Spacing.medium)
                )

                Column(
                    modifier = Modifier
                        .verticalScroll(rememberScrollState())
                ) {
                    Text(
                        viewModel.message,
                        style = Text.themeHeadline,
                        modifier = Modifier.padding(bottom = Spacing.medium)
                    )
                }

                Button(
                    onClick = onDismiss,
                    modifier = Modifier …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

63
推荐指数
2
解决办法
7万
查看次数

在 Jetpack Compose 中显示自定义警报对话框

我正在搜索如何在 Jetpack Compose 中创建自定义对话框。在 XML 或 Material Design 中,我们可以轻松创建自定义对话框,在其中我们可以接受用户输入、单选按钮等,但我在 Jetpack Compose 中没有找到这样的东西。

android android-alertdialog android-jetpack android-jetpack-compose android-compose-dialog

62
推荐指数
7
解决办法
7万
查看次数

撰写:带有键的 Remember() 与 derivativeStateOf()

这两种方法有什么区别?

  1. val result = remember(key1, key2) { computeIt(key1, key2) }文档
  2. val result by remember { derivedStateOf { computeIt(key1, key2) } }文档

key1如果和 都没有key2改变,则两者都避免重新计算。如果导出下游状态,第二个也可以避免重新计算,但除此之外,它们的行为是相同的,不是吗?

kotlin android-jetpack-compose jetbrains-compose

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

Laggy Lazy Column Android Compose

我在Jetpack Compose中创建了一个完整的应用程序。然而,其表现Lazy Column非常糟糕,而且没有任何意义。Lazy Column应该是 的替代品RecyclerView,但RecyclerView目前效果更好。

我制作了一个Lazy Column带有标题和Lazy Rows项目的项目(基本上是一个嵌套列表)。正如您所看到的,有图像,但我使用了Coil 库,因此所有内容都应该在单独的线程中加载。我已经看过这些讨论:link1link2。但似乎这个问题还没有解决方案,尽管现在Jetpack Compose已经稳定了。

你们中有人找到了获得更好性能的方法吗?还是我应该用 来Lazy Rows代替RecyclerView

这是页面的屏幕:

在此输入图像描述

android kotlin kotlin-coroutines android-jetpack-compose coil

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