Jetpack Compose使用CenterAlignedTopAppBar遇编译错误求助
解决Jetpack Compose中TopAppBar实验性API编译错误
你遇到的编译错误是因为CenterAlignedTopAppBar和Material 3版本的TopAppBar属于实验性API,Android Studio默认会拦截未声明许可的实验性API调用,因此抛出该异常。以下是两种解决方法:
方法一:显式允许使用实验性API
在使用这些组件的Composable函数或整个文件上添加@OptIn(ExperimentalMaterial3Api::class)注解,声明你愿意接受实验性API的变动风险。
函数级注解示例:
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.Scaffold @OptIn(ExperimentalMaterial3Api::class) @Composable fun WoofApp() { Scaffold( topBar = { CenterAlignedTopAppBar(title = { Text(text = "hi") }) } ) { paddingValues -> LazyColumn(contentPadding = paddingValues) { items(dogs) { DogItem( dog = it, modifier = Modifier.padding(dimensionResource(id = R.dimen.padding_small)) ) } } } }
文件级注解示例(整个文件生效):
@file:OptIn(ExperimentalMaterial3Api::class) import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.Scaffold // 其他必要导入... @Composable fun WoofApp() { // 代码与原示例一致 }
方法二:改用稳定的Material 2组件
如果你不想依赖实验性API,可以切换到Material 2的TopAppBar,该版本属于稳定API,无需额外注解。只需确保导入的是androidx.compose.material.TopAppBar:
import androidx.compose.material.TopAppBar import androidx.compose.material.Scaffold @Composable fun WoofApp() { Scaffold( topBar = { TopAppBar(title = { Text(text = "hi") }) } ) { paddingValues -> LazyColumn(contentPadding = paddingValues) { items(dogs) { DogItem( dog = it, modifier = Modifier.padding(dimensionResource(id = R.dimen.padding_small)) ) } } } }
内容的提问来源于stack exchange,提问作者HADIKMD
相关产品推荐
相关产品推荐

