Как правильно обрабатывать вставки Android Jetpack Compose с помощью IMEAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как правильно обрабатывать вставки Android Jetpack Compose с помощью IME

Сообщение Anonymous »

Я уже несколько дней пытаюсь решить вставку с проблемой Jetpack Compose и совершенно застрял. Мне очень трудно понять, что не так с моей реализацией, поскольку все это было очень просто с использованием XML.
Я пробовал следовать руководствам, нескольким руководствам и просматривать другие здесь есть вопросы, но я не могу найти правильное решение, у каждого своя проблема, поэтому я явно что-то упускаю.
Что у меня сейчас включено:
  • Добавлена ​​корректировка Resize в манифесте.
  • Добавлен setDecorFitsSystemWindows

Код: Выделить всё

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

WindowCompat.setDecorFitsSystemWindows(window, false

checkAppSettings() // Just checks some data store settings.

setContent {
val viewState = viewModel.viewState.collectAsStateWithLifecycle()

MyTheme(darkTheme = viewState.value.uiMode.isDarkTheme()) {
MainScreen()
}
}
}
  • Добавлены imePadding() и systemBarsPadding() в мой основной Scaffold. Я также изменил видимость нижней панели, чтобы устранить проблему, когда нижняя панель располагалась рядом с содержимым.
Примечание: я также пробовал разные комбинации, со счетом которых я сбился, включая удаление основного Scaffold и замену его столбцом с navHost с весом (1f) и нижней полосой под ним, но кубиков по-прежнему нет.

Код: Выделить всё

@Composable
fun MainScreen() {
val navController = rememberNavController()

Scaffold(
modifier = Modifier
.fillMaxSize()
.imePadding()
.systemBarsPadding(),
bottomBar = {
if (!WindowInsets.isImeVisible) BottomNavigationBar(navController)
}
) { paddingValues ->
NavigationHost(
modifier = Modifier.padding(paddingValues),
navController = navController
)
}
}
Для дальнейшего расширения моя структура, начиная с MainScreen, следующая:

Код: Выделить всё

    \- MainScaffold \
\- MainNavHost \
\- SelectedBottomNavItemNavHost \
\- SelectBottomNavItemScaffold
А чтобы добавить немного больше деталей к SelectBottomNavItemScaffold, вот как он выглядит практически на каждом экране:

Код: Выделить всё

Scaffold(
topBar = {
// This uses Material TopAppBar internally
CustomTopAppBar(
topAppBarVariation = TopAppBarVariation.Title(title = stringResource(id = label)),
showIcons = state.shouldDisplayEditFeedIcon(),
actions = {
Icon(
modifier = Modifier.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = ripple(bounded = false),
onClick = { navController.navigateTo(FeedNavigationItem.FeedEdit) }
),
painter = painterResource(R.drawable.ic_edit),
contentDescription = stringResource(id = R.string.edit)
)
}
)
}
) { paddingValues ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
) {
// Page content goes here, now.
}
}
Конкретная проблема:
Истинную проблему можно увидеть в этих двух видеороликах, которыми я поделился ниже:



Не скрывать нижнюю панель
Добавьте проверку WindowInsets.isImeVisible внизу бар




https://imgur.com/ HkLysj7
https://imgur.com/SY3xhz6


< /div>
При первом подходе мы ничего не скрываем. Нижняя панель прокручивается с помощью клавиатуры и выглядит нормально. Однако при прокрутке содержимого вверх возникает некоторое дрожание, если вы фокусируете текстовое представление в нижней части экрана. Если я выберу текстовый вид в верхней части экрана, проблем не возникнет.
При втором подходе мы скрываем нижнюю панель, но это приводит к появлению пустого пространства (иногда большего размера). изначально и дрожаще анимируется до меньшего размера). Я не уверен, связано ли это с кареткой, так как появляется квадрат, соответствующий пробелу, но у него нет имени или выбора в инспекторе макета, как можно увидеть здесь.Я не совсем уверен, как сформулировать вопрос, потому что я действительно в растерянности. Я хотел бы попросить здесь совета или совета, если кто-нибудь сталкивался с подобными проблемами при настройке 🙇‍♂️
Большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-with-ime
Ответить

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

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

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

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

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