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

Jetpack Compose Material3 CircularProgressIndicator物理设备不旋转问题求助

问题:Android 12物理设备上Compose CircularProgressIndicator动画停滞

我运行了一个仅含单个页面的测试项目,页面中央放置了不确定模式的CircularProgressIndicator组件,理应持续旋转。模拟器上旋转正常,但在三星S10+(运行Android 12,API级别31)的物理设备上动画完全停滞,无法转动。我未执行繁重任务或阻塞UI线程,所有依赖已更新,使用Android Studio Giraffe | 2022.3.1 Patch 2,compileSdk为34,minSdk=24,targetSdk=33。

示例代码

Main Activity

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            NavigationTestTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    AuthAScreen{}
                }
            }
        }
    }
}

Screen

@Composable
fun AuthAScreen(
    navigateToAuthB:() -> Unit
){
    Log.d("AuthAScreen", "AuthAScreen: Screen created ")

    Column(
        Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {

        CircularProgressIndicator(
            modifier = Modifier.size(50.dp),
            color = MaterialTheme.colorScheme.primary,
            strokeWidth = 4.dp,
            /* other optional properties */
        )
    }
}

修复方案

  • 排查硬件加速兼容性:在AndroidManifest.xml的对应Activity标签中添加android:hardwareAccelerated="false",测试动画是否恢复。若有效,说明是硬件加速与该设备/系统版本的兼容问题,可后续针对性处理。
  • 升级Compose依赖版本:确保使用的Compose Material/Material3依赖为最新稳定版,旧版本可能存在Android 12的动画适配Bug。比如Material库可更新至1.5.4及以上,Material3可更新至1.1.2及以上。
  • 强制触发动画系统:在CircularProgressIndicator所在的Composable中添加空的LaunchedEffect,确保Compose的动画调度机制正常工作:
@Composable
fun AuthAScreen(navigateToAuthB:() -> Unit){
    Log.d("AuthAScreen", "AuthAScreen: Screen created ")
    // 添加此代码块
    LaunchedEffect(Unit) {}

    Column(
        Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        CircularProgressIndicator(
            modifier = Modifier.size(50.dp),
            color = MaterialTheme.colorScheme.primary,
            strokeWidth = 4.dp
        )
    }
}
  • 检查系统动画设置:进入三星设备的「设置-开发者选项」,确认「窗口动画缩放」「过渡动画缩放」「动画程序时长缩放」均未设置为0,这会全局禁用所有系统及应用动画。
  • 替换为Material3组件:若当前使用的是Compose Material库,尝试替换为Material3的CircularProgressIndicator,新版本组件针对Android 12+做了更多适配优化:
import androidx.compose.material3.CircularProgressIndicator

@Composable
fun AuthAScreen(navigateToAuthB:() -> Unit){
    Log.d("AuthAScreen", "AuthAScreen: Screen created ")

    Column(
        Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        CircularProgressIndicator(
            modifier = Modifier.size(50.dp),
            color = MaterialTheme.colorScheme.primary,
            strokeWidth = 4.dp
        )
    }
}

内容的提问来源于stack exchange,提问作者Jonathan Goris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:28