我从 Android 开发者平台关注了这个 Codelab:https ://developer.android.com/codelabs/android-proto-datastore#4
添加了与 Codelab 中所示完全相同的依赖项,在尝试同步时出现以下 gradle 异常
A problem occurred configuring project ':app'.
Could not get unknown property 'source' for generate-proto-generateDebugProto of type org.gradle.api.internal.file.DefaultSourceDirectorySet.
at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:125)
at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:42)
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'source' for generate-proto-generateDebugProto of type org.gradle.api.internal.file.DefaultSourceDirectorySet.
at com.google.protobuf.gradle.ProtobufPlugin$_linkGenerateProtoTasksToSourceCompile_closure25$_closure39.doCall(ProtobufPlugin.groovy:472)
at com.google.protobuf.gradle.ProtobufPlugin$_linkGenerateProtoTasksToSourceCompile_closure25.doCall(ProtobufPlugin.groovy:469)
at com.google.protobuf.gradle.ProtobufPlugin.linkGenerateProtoTasksToSourceCompile(ProtobufPlugin.groovy:468)
at com.google.protobuf.gradle.ProtobufPlugin$_doApply_closure5.doCall(ProtobufPlugin.groovy:153)
at jdk.proxy1/jdk.proxy1.$Proxy56.afterEvaluate(Unknown Source)
at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:125)
at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:42)
Run Code Online (Sandbox Code Playgroud)
我不知道问题是什么,尝试升级 Codelab 中显示的版本,到处查找问题,但似乎找不到任何经历过同样事情的人。任何想法?
android-gradle-plugin protobuf-java android-jetpack-compose android-jetpack-datastore
我需要使用 androidx 中的 emoji2-emojipicker,它是通过 XML 视图制作的:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/emoji_picker_header"
android:layout_width="wrap_content"
android:layout_height="@dimen/emoji_picker_header_height"
android:paddingEnd="@dimen/emoji_picker_header_padding"
android:paddingStart="@dimen/emoji_picker_header_padding" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/emoji_picker_body"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
(来源https://github.com/androidx/androidx/tree/androidx-main/emoji2/emoji2-emojipicker和https://developer.android.com/jetpack/androidx/releases/emoji2)
我在撰写中像这样使用它:
AndroidView(
factory = { context ->
EmojiPickerView(context)
},
modifier = Modifier
.fillMaxWidth()
.height(300.dp)
)
Run Code Online (Sandbox Code Playgroud)
在脚手架或柱子等普通表面上使用表情符号选择器没有任何问题,它滚动得非常好并且不会滞后。
如果我将表情符号选择器放入另一个可滚动可组合项(例如 )中ModalBottomSheet,它就不再滚动。
为了使其滚动,我需要添加修饰符,verticalScroll(rememberScrollState())但这AndroidView会使其变得滞后并且需要很长时间才能加载+如果我使其像那样可滚动,则表情符号选项卡由于某种原因无法工作。
我猜它是滞后的,因为我告诉RecyclerView它有无限的高度,所以它会立即渲染所有表情符号,而不是懒惰地渲染。
阅读周围的内容,当 RecyclerView 位于另一个可滚动可组合项中时,滚动事件似乎无法通过子父可组合项正确传播。关于如何解决这个问题有什么建议吗?
这是一个演示,显示了一个可以正常工作的屏幕(任务屏幕)和一个不能正常工作的屏幕ModalBottomSheet: https: //drive.google.com/file/d/1vU94uPwBTtpDg8hb0JauqZmw-LHyP9Mz/view ?usp=sharing(在此视频中,我verticalScroll在 ModalBottomSheet emojipicker 中添加了修饰符,使其可滚动,否则它不会滚动,而任务中的修饰符没有该修饰符)
android android-view android-jetpack android-jetpack-compose