小编Phi*_*hov的帖子

使用 Kotlin 信号处理 (KSP) 时提供注释处理器参数

我使用以下方法将 KSP 与 Room 结合使用:

plugins {
    id 'com.google.devtools.ksp' version "$kotlin_version-1.0.0"
Run Code Online (Sandbox Code Playgroud)
dependencies {
   ksp "androidx.room:room-compiler:$room_version"
Run Code Online (Sandbox Code Playgroud)

这确实有效。但是,当我尝试运行它时,我会收到此警告

[ksp] MyDatabase.kt:11:架构导出目录未提供给注释处理器,因此我们无法导出架构。您可以提供room.schemaLocation注释处理器参数或将 exportSchema 设置为 false。

为了做到这一点:使用 KSP 时如何提供注释处理器参数?

android kotlin android-room kotlin-symbol-processing

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

如何在关闭键盘时清除 TextField 焦点并防止在 Jetpack Compose 中退出应用程序时需要按两次后退?

我正在使用BasicTextField。

当我开始编辑时,后退按钮变成隐藏键盘按钮(向下箭头)。

第一次按后退按钮会隐藏键盘,但焦点仍然在文本字段上。两者onFocusChangedBackPressHandler处理程序都没有被调用。

第二次按后退按钮可清除焦点:onFocusChanged被调用且未BackPressHandler被调用。

BackHandler {
    println("BackPressHandler")
}
val valueState = remember { mutableStateOf(TextFieldValue(text = "")) }
BasicTextField(
    value = valueState.value,
    onValueChange = {
        valueState.value = it
    },
    modifier = Modifier
        .fillMaxWidth()
        .onFocusChanged {
            println("isFocused ${it.isFocused}")
        }
)
Run Code Online (Sandbox Code Playgroud)

第三次 BackHandler 工作正常。只是用它来测试,我在这里不应该需要它,它预计在第一次点击后退按钮后焦点会丢失

android android-jetpack-compose android-jetpack-compose-text

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

如何在 Jetpack Compose 中强制某些屏幕的方向?

有了jetpack compose navigation,我想它可能会成为一个单一的活动应用程序。如何仅对某些可组合项(屏幕)强制定向?假设我只想在播放视频而不是其他屏幕时强制横向?没有导航,可以在清单中声明方向,但使用导航,我们可以在可组合级别指定这一点?

android android-jetpack-navigation android-jetpack-compose

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

Flow 类不需要类型参数

我在使用 Kotlin Flow 时遇到了问题。

我从官方指南中复制了以下代码

fun simple(): Flow<Int> = flow { 
    for (i in 1..3) {
        delay(100) 
        emit(i) 
    }
}
Run Code Online (Sandbox Code Playgroud)

但Android Studio提示如下错误:

Flow 类不需要类型参数

我究竟做错了什么?

kotlin kotlin-coroutines kotlin-flow

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

为什么在每个 Compose Navigation 路线中都会创建一个新的 ViewModel?

我有一个活动应用程序,仅使用 ui 的可组合项(一个活动,没有片段)。我使用一个视图模型在两个不同的屏幕(可组合项)中保存 ui 的数据。我按照状态文档中的描述在两个屏幕中创建视图模型

@Composable
fun HelloScreen(helloViewModel: HelloViewModel = viewModel()) 
Run Code Online (Sandbox Code Playgroud)

现在我注意到在第一个屏幕中加载或设置的数据在第二个屏幕中被重置。

我还注意到init{}每次被调用时viewModel()都会被调用。这真的是预期的行为吗?

根据该方法的文档,它应该返回现有的 ViewModel 或创建一个新的 ViewModel。

我还看到视图模型是不同的对象。所以viewModel()总是创建一个新的。但为什么?

有什么想法我可能做错了什么吗?或者我误解了该方法的用法?

android kotlin android-jetpack-compose

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

Jetpack Compose 中的可扩展文本

所以我使用Text()像这样的可组合项:

Text(
    text = "this is some sample text that is long and so it is 
            ellipsized",
    maxLines = 1,
    overflow = TextOverflow.Ellipsis
)
Run Code Online (Sandbox Code Playgroud)

并且它正确地省略了文本:

在此输入图像描述

问题是我想要See More在省略号末尾有一个标签,提示用户展开可见的文本框。我该如何添加呢?

在此输入图像描述

android kotlin android-jetpack-compose android-jetpack-compose-text

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

Jetpack Compose:如何禁用儿童手势检测

是否有一个内置函数Modifier可以禁用其子级的任何手势检测/指针输入交互?

例如

@Composable
fun Foo() {
    Box(modifier = Modifier.gesturesEnabled(enabled = false)) {
        BasicText(text = "Hello", modifier = Modifier.clickable { // clickable is not enabled
            // ...
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法来推出我自己的(非常简单)实现CompositionLocal

val LocalGesturesEnabled = compositionLocalOf { mutableStateOf(true) }

fun Modifier.myClickable(onClick: () -> Unit, enabled: Boolean = true) = composed {
    clickable(enabled = enabled && LocalGesturesEnabled.current.value, onClick)
}
Run Code Online (Sandbox Code Playgroud)

但它不适用于第三方可组合项或更复杂的可组合项(例如LazyList.

gesture android-jetpack-compose

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

Jetpack Compose 对话框 - 有没有办法更改背景透明度?

当我们在 Jetpack Compose 中显示Dialog/AlertDialog时,背景似乎有点暗,有没有办法调整背景 Alpha 或使其透明?例如:当显示对话框时,该图像中的白色背景变成深灰色。

android background dialog alpha-transparency android-jetpack-compose

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

无法将类型“Binding&lt;String?&gt;”的值转换为预期参数类型“Binding&lt;String&gt;”

我正在尝试在单独的详细视图中编辑项目。我想在从列表中选择项目后将项目详细信息填充到文本字段中。

      List {
                    ForEach(vm.savedEntites) { entity in
                        Text(entity.name ?? "No Name")

                        HStack {
                        Button(action: {vm.deleteMemory(entity: entity)}) {
                                       Label("Delete",systemImage: "trash")
       
                                     }
                     
                            Button(action: {
                                    vm.selectedEntity = entity
                                    showingDetailScreen.toggle()}) {
                            Label("Details", systemImage: "pencil")
                                     }
                            
                        }
                    }// list ends here
                    .sheet(isPresented: $showingDetailScreen) {
                        DetailItemView(isVisible: self.$showingDetailScreen, entity: vm.selectedEntity!, text: vm.selectedEntity!)
                           }// sheet ends here
                }
            
Run Code Online (Sandbox Code Playgroud)

详细项目视图表。这就是我在 TextField 旁边收到此错误的地方

无法将类型“Binding<String?>”的值转换为预期参数类型“Binding”

 struct DetailItemView: View  {
        
        @Environment(\.presentationMode) var presentationMode
        @Binding var isVisible: Bool
        var entity: MemoryEntity
        @ObservedObject var text: MemoryEntity
 
        var body: some View {
           Text(entity.name ?? "No …
Run Code Online (Sandbox Code Playgroud)

core-data swift swiftui

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

18
推荐指数
2
解决办法
8444
查看次数