You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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相关依赖版本不兼容导致,可通过以下步骤修复:

  1. 升级Compose BOM到稳定版
    将模块级Gradle中的Compose BOM版本从2023.10.01升级至最新稳定版(示例使用2024.06.00),确保所有Compose库版本统一兼容。

  2. 匹配Kotlin与Compose Compiler版本
    当前Kotlin版本为1.9.20,对应的Compose Compiler版本应为1.5.11,更新composeOptions中的版本号。

  3. 升级Activity Compose依赖
    将androidx.activity:activity-compose升级至与Compose BOM兼容的版本(示例使用1.9.0)。

  4. 统一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")
    
    // 其他依赖保持不变
}
  1. 同步并清理构建
    执行File -> Sync Project with Gradle Files同步配置,再通过Build -> Clean Project清理缓存,重新编译运行即可解决键盘不弹出问题。

内容的提问来源于stack exchange,提问作者S.Baner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:09:54