我使用以下方法将 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 时如何提供注释处理器参数?
我正在使用BasicTextField。
当我开始编辑时,后退按钮变成隐藏键盘按钮(向下箭头)。
第一次按后退按钮会隐藏键盘,但焦点仍然在文本字段上。两者onFocusChanged和BackPressHandler处理程序都没有被调用。
第二次按后退按钮可清除焦点: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
有了jetpack compose navigation,我想它可能会成为一个单一的活动应用程序。如何仅对某些可组合项(屏幕)强制定向?假设我只想在播放视频而不是其他屏幕时强制横向?没有导航,可以在清单中声明方向,但使用导航,我们可以在可组合级别指定这一点?
我在使用 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 类不需要类型参数
我究竟做错了什么?
我有一个活动应用程序,仅使用 ui 的可组合项(一个活动,没有片段)。我使用一个视图模型在两个不同的屏幕(可组合项)中保存 ui 的数据。我按照状态文档中的描述在两个屏幕中创建视图模型
@Composable
fun HelloScreen(helloViewModel: HelloViewModel = viewModel())
Run Code Online (Sandbox Code Playgroud)
现在我注意到在第一个屏幕中加载或设置的数据在第二个屏幕中被重置。
我还注意到init{}每次被调用时viewModel()都会被调用。这真的是预期的行为吗?
根据该方法的文档,它应该返回现有的 ViewModel 或创建一个新的 ViewModel。
我还看到视图模型是不同的对象。所以viewModel()总是创建一个新的。但为什么?
有什么想法我可能做错了什么吗?或者我误解了该方法的用法?
所以我使用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
是否有一个内置函数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.
当我们在 Jetpack Compose 中显示Dialog/AlertDialog时,背景似乎有点暗,有没有办法调整背景 Alpha 或使其透明?例如:当显示对话框时,该图像中的白色背景变成深灰色。

android background dialog alpha-transparency android-jetpack-compose
我正在尝试在单独的详细视图中编辑项目。我想在从列表中选择项目后将项目详细信息填充到文本字段中。
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) 我无法在Jetpack Compose 中使用 Coil加载此图像Image
android ×6
kotlin ×5
android-jetpack-compose-text ×2
android-room ×1
background ×1
coil ×1
core-data ×1
dialog ×1
gesture ×1
kotlin-flow ×1
svg ×1
swift ×1
swiftui ×1