В приложении Kotlin Multiplatform + Compose Multiplatform У меня есть общий композитный базовый завод, который делает верхнюю полосу, контент и нижние действия. Я хочу, чтобы эта база показала небольшой «ориентационный флаг» (например, «портрет»/«ландшафт»), а также позволил договоренному содержанию реагировать на текущую ориентацию.
Код:
/**
* BaseScreen is a reusable composable that provides a standard layout
* for screens in the application.
* all items are within a Column
*/
@Composable
fun BaseScreen(
title: String,
config: ScreenConfig = ScreenConfig.PhoneConfig,
onPrevClick: (() -> Unit)? = null,
onNextClick: (() -> Unit)? = null,
prevButtonText: String = stringResource(Res.string.previous),
nextButtonText: String = stringResource(Res.string.next),
navigationIcon: @Composable (() -> Unit)? = null,
topRightText: String? = null, // For tablet
snackbarHostState: SnackbarHostState = SnackbarHostState(), // For tablet
buttons: Array = emptyArray(), // For tablet
modifier: Modifier = Modifier,
content: @Composable() (ColumnScope.() -> Unit)
) {
MaterialTheme {
val statusBarValues = WindowInsets.safeDrawing.asPaddingValues()
Column(
modifier = Modifier
.fillMaxSize()
.background(backgroundColor)
.padding(bottom = statusBarValues.calculateBottomPadding())
) {
// Top Bar
Box(
modifier = Modifier.fillMaxWidth().background(primaryColor)
, contentAlignment = Alignment.Center
) {
navigationIcon?.let {
Box(
modifier = Modifier.align(Alignment.CenterStart)
.padding(top = statusBarValues.calculateTopPadding())
) {
it()
}
}
Text(
text = title,
color = Color.White,
fontSize = EXTRA_MEDIUM,
style = MaterialTheme.typography.headlineSmall,
modifier = Modifier.align(Alignment.Center)
.padding(top = statusBarValues.calculateTopPadding())
)
if (config.showTopRightText) {
topRightText?.let {
Text(
text = it,
color = Color.White,
style = MaterialTheme.typography.headlineLarge,
modifier = Modifier.align(Alignment.TopEnd)
.padding(end = 16.dp, top = statusBarValues.calculateTopPadding())
)
}
}
}
// Dynamic Content
Column(
modifier = modifier.padding(config.contentPadding.dp).weight(1f),
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally
) {
content()
}
// Bottom Navigation Bar
if (config.showNavigationButtons &&
(onPrevClick != null || onNextClick != null)
) {
Row(
modifier = Modifier.fillMaxWidth()
.padding(horizontal = paddingSm, vertical = paddingXs),
horizontalArrangement = Arrangement.SpaceBetween
) {
onPrevClick?.let {
// RoundedButton(stringResource(Res.string.previous), onClick = it)
RoundedButton(text = prevButtonText, onClick = onPrevClick)
}
Spacer(modifier = Modifier.weight(1f))
onNextClick?.let {
RoundedButton(text = nextButtonText, onClick = onNextClick)
//RoundedButton(
// text = stringResource(Res.string.next),
// onClick = it
//)
}
}
} else if (!config.showNavigationButtons && buttons.isNotEmpty()) {
Row(
modifier = Modifier.fillMaxWidth().padding(
horizontal = config.topBarPaddingHorizontal.dp,
vertical = config.topBarPaddingVertical.dp
), horizontalArrangement = config.buttonArrangement
) {
buttons.forEachIndexed { index, btn ->
RoundedButton(btn.text, Modifier, onClick = btn.onClick)
if (index < buttons.size - 1) {
Spacer(modifier = Modifier.width(config.buttonSpacing.dp))
}
}
}
}
SnackbarHost(
hostState = snackbarHostState,
modifier = Modifier.align(Alignment.CenterHorizontally)
)
}
}
}
< /code>
Код для базового экрана, который я сделал, пользовательский интерфейс экранов в основном один и тот же
, если мне нужно изменить подход, пожалуйста, расскажите мне для управления ориентацией.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... sescreen-i
Составьте многоплатформу: как установить портрет / ландшафт из общего база -эскапа (iOS / Android) ⇐ IOS
Программируем под IOS
1759210535
Anonymous
В приложении Kotlin Multiplatform + Compose Multiplatform У меня есть общий композитный базовый завод, который делает верхнюю полосу, контент и нижние действия. Я хочу, чтобы эта база показала небольшой «ориентационный флаг» (например, «портрет»/«ландшафт»), а также позволил договоренному содержанию реагировать на текущую ориентацию.
Код:
/**
* BaseScreen is a reusable composable that provides a standard layout
* for screens in the application.
* all items are within a Column
*/
@Composable
fun BaseScreen(
title: String,
config: ScreenConfig = ScreenConfig.PhoneConfig,
onPrevClick: (() -> Unit)? = null,
onNextClick: (() -> Unit)? = null,
prevButtonText: String = stringResource(Res.string.previous),
nextButtonText: String = stringResource(Res.string.next),
navigationIcon: @Composable (() -> Unit)? = null,
topRightText: String? = null, // For tablet
snackbarHostState: SnackbarHostState = SnackbarHostState(), // For tablet
buttons: Array = emptyArray(), // For tablet
modifier: Modifier = Modifier,
content: @Composable() (ColumnScope.() -> Unit)
) {
MaterialTheme {
val statusBarValues = WindowInsets.safeDrawing.asPaddingValues()
Column(
modifier = Modifier
.fillMaxSize()
.background(backgroundColor)
.padding(bottom = statusBarValues.calculateBottomPadding())
) {
// Top Bar
Box(
modifier = Modifier.fillMaxWidth().background(primaryColor)
, contentAlignment = Alignment.Center
) {
navigationIcon?.let {
Box(
modifier = Modifier.align(Alignment.CenterStart)
.padding(top = statusBarValues.calculateTopPadding())
) {
it()
}
}
Text(
text = title,
color = Color.White,
fontSize = EXTRA_MEDIUM,
style = MaterialTheme.typography.headlineSmall,
modifier = Modifier.align(Alignment.Center)
.padding(top = statusBarValues.calculateTopPadding())
)
if (config.showTopRightText) {
topRightText?.let {
Text(
text = it,
color = Color.White,
style = MaterialTheme.typography.headlineLarge,
modifier = Modifier.align(Alignment.TopEnd)
.padding(end = 16.dp, top = statusBarValues.calculateTopPadding())
)
}
}
}
// Dynamic Content
Column(
modifier = modifier.padding(config.contentPadding.dp).weight(1f),
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally
) {
content()
}
// Bottom Navigation Bar
if (config.showNavigationButtons &&
(onPrevClick != null || onNextClick != null)
) {
Row(
modifier = Modifier.fillMaxWidth()
.padding(horizontal = paddingSm, vertical = paddingXs),
horizontalArrangement = Arrangement.SpaceBetween
) {
onPrevClick?.let {
// RoundedButton(stringResource(Res.string.previous), onClick = it)
RoundedButton(text = prevButtonText, onClick = onPrevClick)
}
Spacer(modifier = Modifier.weight(1f))
onNextClick?.let {
RoundedButton(text = nextButtonText, onClick = onNextClick)
//RoundedButton(
// text = stringResource(Res.string.next),
// onClick = it
//)
}
}
} else if (!config.showNavigationButtons && buttons.isNotEmpty()) {
Row(
modifier = Modifier.fillMaxWidth().padding(
horizontal = config.topBarPaddingHorizontal.dp,
vertical = config.topBarPaddingVertical.dp
), horizontalArrangement = config.buttonArrangement
) {
buttons.forEachIndexed { index, btn ->
RoundedButton(btn.text, Modifier, onClick = btn.onClick)
if (index < buttons.size - 1) {
Spacer(modifier = Modifier.width(config.buttonSpacing.dp))
}
}
}
}
SnackbarHost(
hostState = snackbarHostState,
modifier = Modifier.align(Alignment.CenterHorizontally)
)
}
}
}
< /code>
Код для базового экрана, который я сделал, пользовательский интерфейс экранов в основном один и тот же
, если мне нужно изменить подход, пожалуйста, расскажите мне для управления ориентацией.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79776977/compose-multiplatform-how-to-set-portrait-landscape-from-a-shared-basescreen-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия