Как иметь другую верхнюю панель приложения, но одну и ту же нижнюю панель приложения в навигации voyagerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как иметь другую верхнюю панель приложения, но одну и ту же нижнюю панель приложения в навигации voyager

Сообщение Anonymous »

Я хочу иметь разные верхние панели приложений для разных экранов в приложении Android, но иметь одну и ту же нижнюю панель
это моя текущая настройка
@Composable
fun MainCompose(){
AppTheme {
Navigator(ProjectScreen()) {navigation ->
Scaffold(
bottomBar = {
BottomNavigationBar()
},
){innerPadding ->
SlideTransition(
navigator = navigation,
modifier = Modifier.padding(innerPadding)
)
}
}
}
}

а это моя нижняя панель
@Composable
fun BottomNavigationBar() {

val navigator = LocalNavigator.currentOrThrow

BottomAppBar(
actions = {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly
) {
allScreens.forEach { navLinks ->
TextButton(onClick = {
navigator.push(navLinks.screen)
}) {
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
Row {
navLinks.icon()
}
Spacer(Modifier.padding(4.dp))
Row {
Text(navLinks.name, style = MaterialTheme.typography.labelMedium)
}
}
}
}
}
}
)
}

Мне нужна отдельная верхняя панель для каждого экрана, по которому я перемещаюсь.
Пример: заголовок верхней панели домашней страницы говорит о главном, а экран настроек говорит о настройках
p>
///////////// Редактировать /////////////
Это как я это сделал
@Composable
fun MainCompose(){
AppTheme {
Navigator(ProjectScreen()) {navigation ->
val currentScreen = navigation.lastItem

Scaffold(
bottomBar = {
BottomNavigationBar()
},
topBar = {
TopBarForCurrentScreen(currentScreen ,navigation)
}
){innerPadding ->
SlideTransition(
navigator = navigation,
modifier = Modifier.padding(innerPadding)
)
}
}
}
}

лучшая забава в панели приложений
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopBarForCurrentScreen(currentScreen: Screen ,navigation: Navigator) {
when (currentScreen) {
is ProjectScreen -> {
TopAppBar(
navigationIcon = {
Icon(
painter = painterResource(R.drawable.project), contentDescription = "icon",
Modifier.size(20.dp)
)
},
title = {
Text(
"Projects",
style = MaterialTheme.typography.titleLarge,
fontWeight = FontWeight.Bold
)
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.secondaryContainer,
titleContentColor = MaterialTheme.colorScheme.onSecondaryContainer
),
actions = {
IconButton(onClick = {}) {
Icon(Icons.Filled.Search, contentDescription = "search")
}
Button (
onClick = {
navigation.push(FormScreen())
},
colors = ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.tertiaryContainer,
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
)
) {
Row(
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
Column {
Icon(
Icons.Filled.Add,
contentDescription = "Create"
)
}
Column {
Text("Create")
}
}
}
}
)
}

is FormScreen -> {
TopAppBar(
navigationIcon = {
Icon(
painter = painterResource(R.drawable.form), contentDescription = "icon",
Modifier.size(20.dp)
)
},
title = {
Text(
"Forms",
style = MaterialTheme.typography.titleLarge,
fontWeight = FontWeight.Bold
)
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.secondaryContainer,
titleContentColor = MaterialTheme.colorScheme.onSecondaryContainer
),
)
}

else -> {
TopAppBar(
navigationIcon = {
Icon(
painter = painterResource(R.drawable.project), contentDescription = "icon",
Modifier.size(20.dp)
)
},
title = {
Text(
"Projects",
style = MaterialTheme.typography.titleLarge,
fontWeight = FontWeight.Bold
)
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.secondaryContainer,
titleContentColor = MaterialTheme.colorScheme.onSecondaryContainer
),
actions = {
IconButton(onClick = {}) {
Icon(Icons.Filled.Search, contentDescription = "search")
}
}
)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... navigation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»