我有一个盒子和一些文本。Text 实际上只是一个数字,可以是 1、2 或 3 位数字。一方面,我想包装内容以适应我们得到 3 位数字的情况(这会使框更宽),但另一方面,如果我们得到 1 位数字,框就会变得非常宽。又瘦又看起来很尴尬。
我已经尝试Modifier.width(Int.dp)过Modifier.wrapContentWidth(),甚至将两者结合起来,但无法让它正常工作。Compose 中是否有一种方法可以包装内容,但具有最小(默认)宽度或高度?
如果可能的话,我宁愿不使用if - else关于输入大小的声明,因为这会有点违背目的。
根据官方集成指南,需要添加
plugins {
id 'kotlin-kapt'
...
}
Run Code Online (Sandbox Code Playgroud)
和
dependencies {
implementation "com.google.dagger:hilt-android:{hilt_version}"
kapt "com.google.dagger:hilt-compiler:{hilt_version}"
}
Run Code Online (Sandbox Code Playgroud)
到你的build.grade文件。但是,当我执行 gralde 同步时,出现以下错误:
在以下任何来源中均未找到插件 [id: 'kotlin-kapt']:
是否可以在纯java项目中使用Dagger-Hilt?或者您必须使用普通 Dagger 或使用 Kotlin?
我很惊讶地发现Google 的 API中尚未提供此功能。我能找到的最接近的是cancel(String tag, Id int),但这需要特定的 ID Notification。还有,cancelAll()但是会取消每个频道中的所有通知,这不是我想要的。有没有一种简单的方法可以取消所有通知,但仅限于特定通知NotificationChannel?换句话说,有类似的东西cancellAll(String channelId)吗?我们可以假设 API >= 26 (Oreo)。
我正在尝试动画添加/删除项目LazyList。这篇文章建议我使用LazyItemScope$Modifier.animateItemPlacement(),但我遇到了问题。
我正在使用 Jetpack Compose 版本1.1.0-beta03。这是我正在使用的代码片段:
@ExperimentalFoundationApi
@ExperimentalAnimationApi
@ExperimentalMaterialApi
@Composable
fun NotificationList(
listState: LazyListState,
notifications: List<Notification>
) {
Surface(modifier = Modifier.fillMaxSize()) {
LazyColumn(state = listState) {
itemsIndexed(
items = notifications,
key = { _, listItem -> listItem.hashCode() }
) { _, notification ->
// ...
SwipeToDismiss(
modifier = Modifier.animateItemPlacement(),
// ...
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我的应用程序在启动时崩溃了。以下是我在控制台中看到的内容。有谁知道我做错了什么或如何解决?
E/AndroidRuntime:致命异常:主进程:com.somecompany.someapp,PID:22108 java.lang.NoSuchMethodError:没有静态方法 AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/ jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V 类 Landroidx/compose/animation/AnimatedContentKt; 或其超类(“androidx.compose.animation.AnimatedContentKt”的声明出现在 com.google.accompanist.navigation.animation.AnimatedNavHostKt 的 /data/app/com.somecompany.someapp-zQWcLTjkBOQqglBKnmHLIg==/base.apk 中)。 AnimatedNavHost(AnimatedNavHost.kt:242) 在 com.somecompany.someapp.MainActivity2$onCreate$1$1$1$5.invoke(MainActivity2.kt:78) 在 ...
我正在尝试在 Jetpack Compose 中创建一个TextField供用户输入名字和姓氏的。
有没有办法只允许字母和空格([a-zA-Z\s])作为输入?我已经尝试了所有可用的选项,包括KeyboardType.Text、KeyboardType.Ascii、KeyboardType.Uri,但它们都显示数字!
我错过了一些明显的东西吗?老实说,我对谷歌没有立即提供这个选项感到有点震惊。
我的应用程序仅支持landscape模式(这是业务需求)。
我的文件夹中有一个布局 xml 文件layout-land,但我没有费心去创建layout文件夹,因为我在 Android 清单文件中明确禁用了纵向模式:
<activity android:name=".MainActivity"
android:screenOrientation="landscape">
</activity>
Run Code Online (Sandbox Code Playgroud)
然而在我的布局 xml 文件中,我收到了标题中提到的警告(尽管有警告,应用程序运行得很好)。
这是否只是 Android studio 愚蠢的原因,因为它没有看到清单文件中禁用了肖像?我可以安全地忽略此警告吗?或者我真的应该改变一些东西吗?
另外,作为一个附带问题,有什么方法可以实现 landscape基本方向吗?”这整个警告源于基本方向这一事实portrait,如果我能以某种方式实现landscape基本方向,那么这个警告可能就会消失。
有没有办法copy通过将变量名作为函数中的参数传递来指定要复制的字段?这是一个例子来说明我的意思。假设我们有以下内容:
val myData = User()
data class User(
val firstName: String = "",
val lastName: String = "",
val email: String = ""
)
Run Code Online (Sandbox Code Playgroud)
我想做的是创建一个执行以下操作的函数:
fun update(fieldToBeUpdated: String, value: String) {
myData.update {
it.copy(fieldToBeUpdated = value)
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这是行不通的,因为编译器说
找不到具有此名称的参数:fieldToBeUpdated
有谁知道如何实现这一点,或者这在 Kotlin 中是不可能的?