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
相关产品推荐
相关产品推荐

