- LazyColumn(
- modifier = Modifier.fillMaxSize(),
- state = rememberLazyListState()
- ) {
- item(
- contentType = "header"
- ) {
- Text(
- text = "Header",
- modifier = Modifier
- .padding(16.dp)
- .fillParentMaxWidth()
- )
- }
- items(
- count = 100,
- contentType = { "item" }
- ) {
- Text(
- text = "Item : $it",
- modifier = Modifier
- .padding(16.dp)
- .fillParentMaxWidth()
- )
- }
- }
2022年4月30日土曜日
LazyColumn/LazyRow で content types を使う
2022年4月14日木曜日
WindowInsetsControllerCompat を使って status bar と navigation bar の light mode を切り替える
Material Catalog アプリのコードを読んでいて見つけたんですが、
WindowCompat.getInsetsController() で取得した WindowInsetsControllerCompat の setAppearanceLightStatusBars() と setAppearanceLightNavigationBars() を使うことで、status bar と navigation bar の light mode(light mode だとアイコンがグレーになり、dark だと白になる)をコードから切り替えることができます。
このようにアプリ用の MaterialTheme のところで SideEffect を使って切り替え処理をすると、Theme の xml で頑張らなくて良くなるので便利です。
WindowCompat.getInsetsController() で取得した WindowInsetsControllerCompat の setAppearanceLightStatusBars() と setAppearanceLightNavigationBars() を使うことで、status bar と navigation bar の light mode(light mode だとアイコンがグレーになり、dark だと白になる)をコードから切り替えることができます。
このようにアプリ用の MaterialTheme のところで SideEffect を使って切り替え処理をすると、Theme の xml で頑張らなくて良くなるので便利です。
- @Composable
- fun MyAppTheme(
- darkTheme: Boolean = isSystemInDarkTheme(),
- content: @Composable () -> Unit
- ) {
- val view = LocalView.current
- val context = LocalContext.current
- SideEffect {
- val controller = WindowCompat.getInsetsController(context.findActivity().window, view)
- controller?.isAppearanceLightStatusBars = !darkTheme
- controller?.isAppearanceLightNavigationBars = !darkTheme
- }
- MaterialTheme(
- colors = if (!darkTheme) LightColorPalette else DarkColorPalette,,
- typography = Typography,
- shapes = Shapes,
- content = content
- )
- }
- private tailrec fun Context.findActivity(): Activity =
- when (this) {
- is Activity -> this
- is ContextWrapper -> this.baseContext.findActivity()
- else -> throw IllegalArgumentException("Could not find activity!")
- }
@Composable
fun MyAppTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val view = LocalView.current
val context = LocalContext.current
SideEffect {
val controller = WindowCompat.getInsetsController(context.findActivity().window, view)
controller?.isAppearanceLightStatusBars = !darkTheme
controller?.isAppearanceLightNavigationBars = !darkTheme
}
MaterialTheme(
colors = if (!darkTheme) LightColorPalette else DarkColorPalette,,
typography = Typography,
shapes = Shapes,
content = content
)
}
private tailrec fun Context.findActivity(): Activity =
when (this) {
is Activity -> this
is ContextWrapper -> this.baseContext.findActivity()
else -> throw IllegalArgumentException("Could not find activity!")
}
登録:
投稿 (Atom)