Kotlin escucha el teclado para mostrar y ocultar

Recientemente, encontré la necesidad de monitorear la visualización y ocultación del teclado, y encapsulé un método de extensión en la escena de Kotlin para uso futuro.

El sistema Android en sí mismo no proporciona un método efectivo para monitorear la visualización y ocultación del teclado. El método de monitoreo más utilizado es la altura del área visible de la pantalla. Cuando el cambio de altura supera un cierto valor, generalmente se considera para ser más de 200 píxeles, significa que el teclado se muestra y oculta Ocultar acciones.

fun Activity.observeKeyboardChange(onChange: (isShowing: Boolean) -> Unit) {
    val rootView = this.window.decorView
    val r = Rect()
    var lastHeight = 0
    rootView.viewTreeObserver.addOnGlobalLayoutListener {
        rootView.getWindowVisibleDisplayFrame(r)
        val height = r.height()
        if (lastHeight == 0) {
            lastHeight = height
        } else {
            val diff = lastHeight - height
            if (diff > 200) {
                onChange(true)
                lastHeight = height
            } else if (diff < -200) {
                onChange(false)
                lastHeight = height
            }
        }
    }
}

Fanwai
EditText se puede configurar en xml a través de inputType="textMultiLine" para ingresar texto de varias líneas, y a través de imeOptions="actionDone" para configurar el botón en la esquina inferior derecha del teclado. Hay configuraciones comunes como ACTION_DONE, ACTION_SEARCH, y ACTION_SEND.

Sin embargo, si se establece inputType="textMultiLine", la entrada de varias líneas es posible. En este momento, el botón en la esquina inferior derecha del teclado se establecerá de forma predeterminada en una operación de nueva línea y la propiedad set imeOptions no será válida. Después de buscar en Internet muchas veces, finalmente encontré una forma efectiva de hacer que inputType="textMultiLine" e imeOptions="actionDone" sean efectivos al mismo tiempo.

Primero, establezca inputType="textMultiLine" en xml;
luego, establezca imeOptions en actionDone a través del código.

et.imeOptions = EditorInfo.IME_ACTION_DONE
et.setRawInputType(InputType.TYPE_CLASS_TEXT)

Supongo que te gusta

Origin blog.csdn.net/yuantian_shenhai/article/details/126084868
Recomendado
Clasificación