Композитный диалог нижний лист не будет навигационной навигационной панели после миграции SDK 35 (вставки = 0)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Композитный диалог нижний лист не будет навигационной навигационной панели после миграции SDK 35 (вставки = 0)

Сообщение Anonymous »

Я перемещаю свое приложение в Android SDK 35 и столкнулся с классической проблемой элементов, отображаемых под строкой состояния и навигационной панели. Я начал использовать Insets для добавления накладки, и она работает для многих экранов. Однако с помощью пользовательского нижнего листа, созданного с использованием Androidx.compose.ui.window.dialog, я не могу заставить его работать. />[*]modifier.navigationbarspadding()
[*] модификатор.windowinsetspadding(windowinsets.navigationbars)
windowinsets.navigationbars.aspaddingvalues().calculagulateboltpadingpardings /> DialogProperties (DestfitsSystemWindows = false) < /li>
< /ul>
… Но все они возвращают 0,0 нижнего вставки в диалог, однако они не возвращаются в ноль и хорошо работают на других композитных. Диалог). < /P>
Я добавляю фиксированное .padding (внизу = 100.dp) в этот же столб, и лист перемещался правильно, поэтому проблема заключается в вставках.import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Dialog
import androidx.compose.material3.DialogProperties
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.unit.dp

@Composable
fun ActionSheetDialog(
actionSheet: StateFlow,
displayDelay: Duration = 100.milliseconds
) {
Dialog(
onDismissRequest = { /* dismiss */ },
properties = DialogProperties(
usePlatformDefaultWidth = false,
decorFitsSystemWindows = false // I also tried true
)
) {
Box(
Modifier
.fillMaxSize()
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() }
) { /* dismiss */ }
) {
Column(
Modifier
.align(Alignment.BottomCenter)
// none of these work, all give 0 inset:
.navigationBarsPadding()
//.windowInsetsPadding(WindowInsets.navigationBars)
//.padding(WindowInsets.navigationBars.asPaddingValues())
//.padding(bottom = 100.dp) //
Это используется так: < /p>
@Composable
fun MyOutherComposable(
positionState: PositionState,
viewModel: SomeViewModel,
bottomSheetSize: Float
) {
MyTheme {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.background(GalileoTheme.colors.background00)
.fillMaxWidth()
) {
// screen content
}
}
ActionSheetDialog(actionSheet = viewModel.actionSheet)
}
< /code>
У меня есть одно приложение для активности, поэтому я не думаю, что сама деятельность вызывает это. Кроме того, мое приложение использует ту же тему. class = "Lang-Kotlin PrettyPrint-Override">// Fragment.onViewCreated(...)
binding.mapViewCompose.consumeWindowInsets = false

binding.mapViewCompose.setContent {
MapsScreenView(/* ... */) // THIS IS MY MAIN COMPOSABLE
}
< /code>
Редактировать 2: < /h2>
Я добавил это в мой «корневой композиционный» (myouthercomposable), который называется фрагментом, но все значения (переменные паддинга и переменные DP) устанавливаются как 0 значения: < /p>
@Composable
fun MapsScreenView(
// some params
) {
val density = LocalDensity.current

// Compose APIs
val padding1 = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding()
val padding2 = WindowInsets.systemBars.asPaddingValues().calculateBottomPadding()
val padding3 = WindowInsets.safeDrawing.asPaddingValues().calculateBottomPadding()
val padding4 = WindowInsets.ime.asPaddingValues().calculateBottomPadding()

// Direct dp values (instead of PaddingValues)
val dp1 = with(density) { WindowInsets.navigationBars.getBottom(density).toDp() }
val dp2 = with(density) { WindowInsets.systemBars.getBottom(density).toDp() }
val dp3 = with(density) { WindowInsets.safeDrawing.getBottom(density).toDp() }
val dp4 = with(density) { WindowInsets.ime.getBottom(density).toDp() }

localdensity.current, однако, имеет определенные значения, которые не являются 0.
Редактировать 3:
Я также сейчас пробовал SafeContentPadding , но все же не работал:
, но все еще не работал:
, но все же не работал:
не работал:
не работал:


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

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

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

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

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

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