Составьте многоплатформу: как заблокировать определенные экраны на портрет или ландшафт (Android & IOS)IOS

Программируем под IOS
Ответить
Anonymous
 Составьте многоплатформу: как заблокировать определенные экраны на портрет или ландшафт (Android & IOS)

Сообщение 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)
)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ndscape-an
Ответить

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

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

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

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

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