Я столкнулся с проблемой с Jetpack Compose и ModalBottomSheets:
На некоторых устройствах программная клавиатура перекрывает содержимое ModalBottomSheet. На Samsung Galaxy S24 Ultra с Android 14 и OneUI 6.1 и на Google Pixel 6a с Android 15 все работает как положено:
Скриншот Galaxy S24 Ultra
Скриншот Pixel 6a
Но на Samsung Galaxy A52s с Android 12 и OneUI 4.1 программная клавиатура перекрывает содержимое ModalBottomSheet:
Samsung A52s
После нескольких часов отладки, проб и ошибок я понятия не имею, в чем проблема.
Я использую компилятор Compose версии 2.0. .10 с Material3.
AppHost:
Scaffold(
modifier = Modifier.fillMaxSize()
) { padding ->
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.TopCenter
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.BottomCenter
) {
DestinationsNavHost(
navGraph = NavGraphs.root,
engine = engine,
navController = navController,
defaultTransitions = DefaultEatDeTransitions,
modifier = Modifier
.fillMaxSize()
.consumeWindowInsets(padding)
.imePadding()
)
...
}
}
}
DefaultBottomSheet:
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DefaultBottomSheet(
visible: Boolean,
onDismissRequest: () -> Unit,
sheetState: SheetState = rememberModalBottomSheetState(),
scrimColor: Color = Color.Black.copy(alpha = .6F),
content: @Composable ColumnScope.() -> Unit
) {
if (visible) {
ModalBottomSheet(
onDismissRequest = onDismissRequest,
sheetState = sheetState,
properties = ModalBottomSheetDefaults.properties(
shouldDismissOnBackPress = false
),
dragHandle = {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
StatusBarSpacer(color = Color.Transparent)
DefaultDragHandle()
}
},
containerColor = MaterialTheme.colorScheme.background,
scrimColor = scrimColor,
shape = RoundedCornerShape(
topStart = 16.dp,
topEnd = 16.dp
),
windowInsets = WindowInsets(
bottom = 0
),
content = {
content.invoke(this)
NavigationBarSpacer()
}
)
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... omsheet-ui
Клавиатура Jetpack Compose перекрывает пользовательский интерфейс ModalBottomSheet ⇐ Android
Форум для тех, кто программирует под Android
1730965439
Anonymous
Я столкнулся с проблемой с Jetpack Compose и ModalBottomSheets:
На некоторых устройствах программная клавиатура перекрывает содержимое ModalBottomSheet. На Samsung Galaxy S24 Ultra с Android 14 и OneUI 6.1 и на Google Pixel 6a с Android 15 все работает как положено:
Скриншот Galaxy S24 Ultra
Скриншот Pixel 6a
Но на Samsung Galaxy A52s с Android 12 и OneUI 4.1 программная клавиатура перекрывает содержимое ModalBottomSheet:
Samsung A52s
После нескольких часов отладки, проб и ошибок я понятия не имею, в чем проблема.
Я использую компилятор Compose версии 2.0. .10 с Material3.
AppHost:
Scaffold(
modifier = Modifier.fillMaxSize()
) { padding ->
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.TopCenter
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.BottomCenter
) {
DestinationsNavHost(
navGraph = NavGraphs.root,
engine = engine,
navController = navController,
defaultTransitions = DefaultEatDeTransitions,
modifier = Modifier
.fillMaxSize()
.consumeWindowInsets(padding)
.imePadding()
)
...
}
}
}
DefaultBottomSheet:
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DefaultBottomSheet(
visible: Boolean,
onDismissRequest: () -> Unit,
sheetState: SheetState = rememberModalBottomSheetState(),
scrimColor: Color = Color.Black.copy(alpha = .6F),
content: @Composable ColumnScope.() -> Unit
) {
if (visible) {
ModalBottomSheet(
onDismissRequest = onDismissRequest,
sheetState = sheetState,
properties = ModalBottomSheetDefaults.properties(
shouldDismissOnBackPress = false
),
dragHandle = {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
StatusBarSpacer(color = Color.Transparent)
DefaultDragHandle()
}
},
containerColor = MaterialTheme.colorScheme.background,
scrimColor = scrimColor,
shape = RoundedCornerShape(
topStart = 16.dp,
topEnd = 16.dp
),
windowInsets = WindowInsets(
bottom = 0
),
content = {
content.invoke(this)
NavigationBarSpacer()
}
)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79165431/jetpack-compose-keyboard-overlaps-modalbottomsheet-ui[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия