Jetpack Compose中TextField获焦后点击不弹出键盘问题求助
问题:Jetpack Compose TextField 键盘二次点击不弹出
开发基于Jetpack Compose的Android应用时,所有TextField组件均存在以下异常:
- 首次点击TextField,键盘正常弹出
- 按返回键隐藏键盘后,再次点击该TextField,键盘无法弹出
- 仅当先点击其他TextField,再切回原TextField时,键盘才会正常弹出
对应的TextField实现代码:
fun NameViewer(nameState: MutableState<String>) { Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(bottom = 8.dp)) { Text(text = "Item Name:", modifier = Modifier.width(104.dp)) TextField( value = nameState.value, onValueChange = { if (it.length <= 15) nameState.value = it }, placeholder = { Text("Enter name") }, modifier = Modifier.weight(1f), singleLine = true ) } }
经测试确认问题源于依赖兼容性冲突,当前Gradle配置如下:
模块级Gradle配置
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.devtools.ksp") } android { namespace = "com.example.wastesamaritanassignment1" compileSdk = 34 defaultConfig { applicationId = "com.example.wastesamaritanassignment1" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } buildTypes { release { isMinifyEnabled = true isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } buildFeatures { compose = true buildConfig = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.4" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation(platform("androidx.compose:compose-bom:2023.10.01")) androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.01")) val roomVersion = "2.6.1" implementation("androidx.room:room-runtime:$roomVersion") annotationProcessor("androidx.room:room-compiler:$roomVersion") ksp("androidx.room:room-compiler:$roomVersion") implementation("androidx.room:room-ktx:$roomVersion") implementation("androidx.room:room-paging:$roomVersion") implementation("io.coil-kt:coil-compose:2.5.0") implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") implementation("androidx.compose.runtime:runtime-livedata:1.5.4") implementation("androidx.paging:paging-compose:3.2.1") implementation("androidx.activity:activity-compose:1.8.2") implementation(platform("androidx.compose:compose-bom:2023.10.01")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3:1.2.0-beta01") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.01")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") }
顶层Gradle配置
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("com.android.application") version "8.2.0" apply false id("org.jetbrains.kotlin.android") version "1.9.20" apply false id("com.google.devtools.ksp") version "1.9.20-1.0.13" apply false }
解决方案
该问题由Jetpack Compose相关依赖版本不兼容导致,可通过以下步骤修复:
升级Compose BOM到稳定版
将模块级Gradle中的Compose BOM版本从2023.10.01升级至最新稳定版(示例使用2024.06.00),确保所有Compose库版本统一兼容。匹配Kotlin与Compose Compiler版本
当前Kotlin版本为1.9.20,对应的Compose Compiler版本应为1.5.11,更新composeOptions中的版本号。升级Activity Compose依赖
将androidx.activity:activity-compose升级至与Compose BOM兼容的版本(示例使用1.9.0)。统一Material3版本管理
移除Material3依赖的手动版本号,由Compose BOM自动管理,避免版本冲突。
修改后的关键配置片段:
// 模块级Gradle - composeOptions调整 composeOptions { kotlinCompilerExtensionVersion = "1.5.11" } // 模块级Gradle - dependencies调整 dependencies { // 升级Compose BOM implementation(platform("androidx.compose:compose-bom:2024.06.00")) androidTestImplementation(platform("androidx.compose:compose-bom:2024.06.00")) // 升级activity-compose implementation("androidx.activity:activity-compose:1.9.0") // 由BOM管理Material3版本 implementation("androidx.compose.material3:material3") // 其他依赖保持不变 }
- 同步并清理构建
执行File -> Sync Project with Gradle Files同步配置,再通过Build -> Clean Project清理缓存,重新编译运行即可解决键盘不弹出问题。
内容的提问来源于stack exchange,提问作者S.Baner
相关产品推荐
相关产品推荐

