You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
6.1 KiB
170 lines
6.1 KiB
package org.jetbrains.compose.demo.widgets.ui.screens |
|
|
|
import androidx.compose.foundation.Image |
|
import androidx.compose.foundation.layout.* |
|
import androidx.compose.foundation.shape.CircleShape |
|
import androidx.compose.material.* |
|
import androidx.compose.material.icons.Icons |
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack |
|
import androidx.compose.material.icons.automirrored.outlined.ReadMore |
|
import androidx.compose.material.icons.filled.MoreHoriz |
|
import androidx.compose.material.icons.filled.StarBorder |
|
import androidx.compose.material.icons.outlined.* |
|
import androidx.compose.runtime.Composable |
|
import androidx.compose.runtime.mutableStateOf |
|
import androidx.compose.runtime.remember |
|
import androidx.compose.ui.Modifier |
|
import androidx.compose.ui.draw.clip |
|
import androidx.compose.ui.platform.testTag |
|
import androidx.compose.ui.unit.dp |
|
import org.jetbrains.compose.resources.painterResource |
|
import org.jetbrains.compose.demo.widgets.theme.twitterColor |
|
import org.jetbrains.compose.demo.widgets.ui.WidgetsType |
|
import org.jetbrains.compose.demo.widgets.ui.utils.SubtitleText |
|
import org.jetbrains.compose.demo.widgets.ui.utils.TitleText |
|
import org.jetbrains.compose.resources.ExperimentalResourceApi |
|
import org.jetbrains.compose.resources.stringResource |
|
import widgets_gallery.shared.generated.resources.Res |
|
|
|
@Composable |
|
fun AppBars() { |
|
Column(Modifier.testTag(WidgetsType.APP_BARS.testTag)) { |
|
TopAppBarsDemo() |
|
BottomAppBarDemo() |
|
NavigationBarDemo() |
|
} |
|
} |
|
|
|
@OptIn(ExperimentalResourceApi::class) |
|
@Composable |
|
private fun TopAppBarsDemo() { |
|
SubtitleText(subtitle = "Top App bar") |
|
|
|
TopAppBar( |
|
title = { Text(text = "Home") }, |
|
elevation = 8.dp, |
|
navigationIcon = { |
|
IconButton(onClick = {}) { |
|
Icon(Icons.AutoMirrored.Default.ArrowBack, contentDescription = "ArrowBack") |
|
} |
|
} |
|
) |
|
|
|
Spacer(modifier = Modifier.height(8.dp)) |
|
|
|
TopAppBar( |
|
title = { Text(text = "Instagram") }, |
|
backgroundColor = MaterialTheme.colors.surface, |
|
contentColor = MaterialTheme.colors.onSurface, |
|
elevation = 8.dp, |
|
navigationIcon = { |
|
IconButton(onClick = {}) { |
|
Icon(painterResource(Res.drawable.ic_instagram), contentDescription = "Instagram") |
|
} |
|
}, |
|
actions = { |
|
IconButton(onClick = {}) { |
|
Icon(painterResource(Res.drawable.ic_send), contentDescription = "Send") |
|
} |
|
} |
|
) |
|
|
|
Spacer(modifier = Modifier.height(8.dp)) |
|
|
|
TopAppBar( |
|
title = { |
|
Icon( |
|
painterResource(Res.drawable.ic_twitter), |
|
contentDescription = "Twitter", |
|
tint = twitterColor, |
|
modifier = Modifier.fillMaxWidth() |
|
) |
|
}, |
|
backgroundColor = MaterialTheme.colors.surface, |
|
contentColor = MaterialTheme.colors.onSurface, |
|
elevation = 8.dp, |
|
navigationIcon = { |
|
Image( |
|
painterResource(Res.drawable.p6), |
|
contentDescription = "", |
|
modifier = Modifier.padding(vertical = 4.dp, horizontal = 8.dp) |
|
.requiredSize(32.dp).clip(CircleShape) |
|
) |
|
}, |
|
actions = { |
|
Icon( |
|
Icons.Default.StarBorder, |
|
contentDescription = "", |
|
modifier = Modifier.padding(horizontal = 8.dp) |
|
) |
|
} |
|
) |
|
Spacer(modifier = Modifier.height(8.dp)) |
|
} |
|
|
|
@Composable |
|
private fun BottomAppBarDemo() { |
|
Spacer(modifier = Modifier.height(16.dp)) |
|
SubtitleText("Bottom app bars: Note bottom app bar support FAB cutouts when used with scaffolds see demoUI crypto app") |
|
|
|
BottomAppBar( |
|
cutoutShape = CircleShape |
|
) { |
|
IconButton(onClick = {}) { |
|
Icon(Icons.Default.MoreHoriz, contentDescription = "") |
|
} |
|
TitleText(title = "Bottom App Bar") |
|
} |
|
} |
|
|
|
@OptIn(ExperimentalResourceApi::class) |
|
@Composable |
|
private fun NavigationBarDemo() { |
|
Spacer(modifier = Modifier.height(16.dp)) |
|
SubtitleText(subtitle = "Bottom Navigation Bars") |
|
val navItemState = remember { mutableStateOf(NavType.HOME) } |
|
BottomNavigation(backgroundColor = MaterialTheme.colors.surface) { |
|
BottomNavigationItem( |
|
icon = { Icon(Icons.Outlined.Home, contentDescription = "Home") }, |
|
selected = navItemState.value == NavType.HOME, |
|
onClick = { navItemState.value = NavType.HOME }, |
|
label = { Text(text = stringResource(Res.string.spotify_nav_home)) }, |
|
) |
|
BottomNavigationItem( |
|
icon = { Icon(Icons.Outlined.Search, contentDescription = "Search") }, |
|
selected = navItemState.value == NavType.SEARCH, |
|
onClick = { navItemState.value = NavType.SEARCH }, |
|
label = { Text(text = stringResource(Res.string.spotify_nav_search)) } |
|
) |
|
BottomNavigationItem( |
|
icon = { Icon(Icons.Outlined.LibraryMusic, contentDescription = "LibraryMusic") }, |
|
selected = navItemState.value == NavType.LIBRARY, |
|
onClick = { navItemState.value = NavType.LIBRARY }, |
|
label = { Text(text = stringResource(Res.string.spotify_nav_library)) } |
|
) |
|
} |
|
|
|
Spacer(modifier = Modifier.height(16.dp)) |
|
|
|
BottomNavigation { |
|
BottomNavigationItem( |
|
icon = { Icon(Icons.AutoMirrored.Outlined.ReadMore, contentDescription = "ReadMore") }, |
|
selected = navItemState.value == NavType.HOME, |
|
onClick = { navItemState.value = NavType.HOME }, |
|
) |
|
BottomNavigationItem( |
|
icon = { Icon(Icons.Outlined.Search, contentDescription = "Search") }, |
|
selected = navItemState.value == NavType.SEARCH, |
|
onClick = { navItemState.value = NavType.SEARCH }, |
|
) |
|
BottomNavigationItem( |
|
icon = { Icon(Icons.Outlined.CleanHands, contentDescription = "CleanHands") }, |
|
selected = navItemState.value == NavType.LIBRARY, |
|
onClick = { navItemState.value = NavType.LIBRARY }, |
|
) |
|
} |
|
} |
|
|
|
private enum class NavType { |
|
HOME, SEARCH, LIBRARY |
|
} |