Я строю приложение с Compose Multiplatform (kotlin Multiplatform), и мне нужно контролировать ориентацию экрана для определенных экранов. < /p>
Например: < /strong>
Экран x всегда должен быть показан в режиме ландшафта. Экраны, я также хотел бы иметь возможность обнаружить текущую ориентацию (портрет против ландшафта) в моем общем базовом заводе, чтобы как базовый макет, так и содержание экрана могли реагировать соответствующим образом. работать (или быть обработанным чисто) как для Android, так и для iOS? < /p>
Код: < /p>
/**
* 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)
)
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ndscape-an
Составьте многоплатформу: как заблокировать определенные экраны на портрет или ландшафт (Android & IOS) ⇐ IOS
Программируем под IOS
1759227401
Anonymous
Я строю приложение с Compose Multiplatform (kotlin Multiplatform), и мне нужно контролировать ориентацию экрана для определенных экранов. < /p>
Например: < /strong>
Экран x всегда должен быть показан в режиме ландшафта. Экраны, я также хотел бы иметь возможность обнаружить текущую ориентацию (портрет против ландшафта) в моем общем базовом заводе, чтобы как базовый макет, так и содержание экрана могли реагировать соответствующим образом. работать (или быть обработанным чисто) как для Android, так и для iOS? < /p>
Код: < /p>
/**
* 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)
)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79776977/compose-multiplatform-how-to-lock-specific-screens-to-portrait-or-landscape-an[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия