Open1
6.TopBar

依存関係
material3のアイコンを使うので、依存関係を追加。
libs.versions.toml
[libraries]
androidx-material-icons-core = { module = "androidx.compose.material:material-icons-core" }
androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" }
→Sync Now!!!
build.gradle.kts
dependencies {
implementation(libs.androidx.material.icons.core) // アイコンコア(Material 2/3共通)
implementation(libs.androidx.material.icons.extended) // 拡張アイコンセット(Filled, Outlinedなど)
→Sync Now!!!
TopBar
- TopBarはCenterAlignedTopAppBarを使用。
- 最初に表示されるHomeだけ、TopBarが表示されないよう制御。
- 直前の画面、現在のルート、現在の画面を変数に格納。
- 表示の設定はnavigationIcon、title、colorの3つ。
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopBar(
navController: NavController
) {
val navBackStackEntry = navController.currentBackStackEntryAsState().value //直前の画面
val currentRoute = navBackStackEntry?.destination?.route //今のルート
val currentScreen = when (currentRoute) { //今の画面
Screen.Home.route -> Screen.Home
Screen.Profile.route -> Screen.Profile
Screen.Drill.route -> Screen.Drill
Screen.Drawing.route -> Screen.Drawing
else -> Screen.Home
}
if (currentRoute != Screen.Home.route) { //HomeにいるときだけTopBarを表示しない
CenterAlignedTopAppBar(
navigationIcon = {
if (navController.previousBackStackEntry != null) {
IconButton(onClick = { navController.popBackStack() }) {
Icon(imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = stringResource(R.string.icon_back))
}
}
},
title = {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(text = currentScreen.emoji(), fontSize=36.sp)
Spacer(modifier = Modifier.width(dimensionResource(R.dimen.p_medium)))
Text(text = currentScreen.displayName(),
style = MaterialTheme.typography.displaySmall)
}
},
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
containerColor = MaterialTheme.colorScheme.surfaceDim,
)
)
}
}
課題認識
TopBarの背景色を画面ごとに動的に変えたい。
シールドクラスの中にfun bgColor関数を設定して、マテリアルカラーを指定したい。
が、うまくいかない。