Jetpack Compose — как проверить, открыта ли клавиатура или закрыта

Я использую Jetpack Compose и пытаюсь найти способ определить, открыта ли клавиатура.

Я пытался использовать приведенный ниже код, но получаю сообщение об ошибке Unresolved reference: ime. Когда я нажимаю на рекомендуемый импорт (2, показанные ниже), эта ошибка все еще остается.

import android.view.WindowInsets
import android.view.WindowInsets.Type.ime

@Composable
fun signInView() {
   val isVisible = WindowInsets.ime.getBottom(LocalDensity.current) > 0
}

Как я могу решить эту проблему?

Как насчет androidx.compose.foundation.layout.WindowInsets?

Jack 08.01.2023 20:02

Я получаю Unresolved reference: WindowInsets, когда добавляю этот оператор импорта

Vaz 08.01.2023 22:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте зависимости для необходимых вам артефактов в файл build.gradle для вашего приложения или модуля:

dependencies {
    implementation "androidx.compose.foundation:foundation:1.3.1"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.3.2"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Пример:

 @Composable
    fun signInView() {
    var isVisible by remember { mutableStateOf(false) }
    val ime = androidx.compose.foundation.layout.WindowInsets.ime
    val navbar = androidx.compose.foundation.layout.WindowInsets.navigationBars
    var keyboardHeightDp by remember { mutableStateOf(0.dp) }
    val localDensity = LocalDensity.current
    LaunchedEffect(localDensity.density) {
        snapshotFlow {
            ime.getBottom(localDensity) - navbar.getBottom(localDensity)
        }.collect {
            val currentKeyboardHeightDp = (it / localDensity.density).dp
            keyboardHeightDp = maxOf(currentKeyboardHeightDp, keyboardHeightDp)
            isVisible = currentKeyboardHeightDp == keyboardHeightDp
        }
    }
}

Другие вопросы по теме

Как реализовать всплывающее окно предварительного просмотра клавиш на пользовательской клавиатуре Android
Наблюдение за видимостью программной клавиатуры, открытый/закрытый Jetpack Compose
Как отключить/предотвратить автоматическую прокрутку, когда ввод ориентирован на мобильные устройства с помощью всплывающего окна с цветовой панелью?
Как сделать так, чтобы содержимое джетпака не всплывало при открытии клавиатуры
RequestFocus() на EditText, отклонить BotSheetDialog без скрытия клавиатуры, и клавиатура странно отображается
Как запросить фокус редактирования текста на просмотре ресайклера?
Как скрыть программную клавиатуру в пользовательском диалоговом окне предупреждений?
Как скрыть клавиатуру. Системные службы недоступны для Activity до onCreate()
Как удалить специальные символы из КЛАВИАТУРЫ ANDROID без использования пользовательской клавиатуры?
Как указать, какие клавиши отображать на программной клавиатуре? (Андроид)