Tencent Interactive Live 1.8 resuelve el problema del teclado en pantalla que cubre el cuadro de entrada y monitorea de cerca la ventana emergente del teclado en pantalla

En la demostración de Tencent Cloud Interactive Live 1.8, el teclado virtual de la interfaz en vivo cubrirá el cuadro de entrada. La idea original era establecer dinámicamente la posición del cuadro de diálogo del cuadro de entrada, pero después de la modificación en la demostración, se puede resolver en Xiaomi, Meizu, Huawei y otras máquinas El problema de la cobertura, pero todavía hay un problema de cobertura en las máquinas Samsung. Alguien puede haber resuelto el problema de cobertura, pero el teclado virtual del monitor ha fallado. Significa que el diálogo del teclado virtual no está cerrado. Aquí está mi solución, la primera imagen de arriba:

Escriba la descripción de la imagen aquí


Pregunta 1: el teclado virtual cubre el cuadro de diálogo

Escriba la descripción de la imagen aquí

Agregue antes de setContentView
// para evitar que el teclado virtual
cubra el cuadro de entrada del diálogo getWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Puede resolver el problema de la cobertura del teclado en pantalla;

Pregunta 2: cuando aparezca el cuadro de entrada, haga clic en el espacio en blanco para cerrar el teclado virtual y el cuadro de diálogo

1. Cambie el diseño de la raíz del diálogo a match_parent

2. Elimine la supervisión de la posición del diseño raíz en el código antiguo y aumente el evento de supervisión del diseño raíz en Touch

Escriba la descripción de la imagen aquí

Pregunta 3: cierre el cuadro de entrada o presione la tecla de retorno y el diálogo no se cierra

Después de completar los pasos 1 y 2, se descubre que cerrar el cuadro de entrada o presionar la tecla de retorno no se cierra y aparecerá en la parte inferior de la pantalla. En este momento, debe escuchar los eventos de la raíz diseño GlobalLayout

Encontrado en el diseño activity_live.xml, el diseño superior es

    <include
        android:id="@+id/invite_views"
        layout="@layout/invite_views"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" />

En este momento, es suficiente monitorear el diseño del evento;

Nota: OnGlobalLayoutListener responde con las siguientes condiciones:
SoftInputMode es ADJUST_RESIZE; de lo contrario, el cambio de posición no se puede monitorear.

//软键盘的监听
        findViewById(R.id.invite_views).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                //获取当前界面可视部分
                getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //获取屏幕的高度
                int screenHeight =  getWindow().getDecorView().getRootView().getHeight();
                //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数
                int heightDifference = screenHeight - r.bottom;

                if(heightDifference <= 0 && mLastDiff > 0){
                    //软键盘收起状态
                    Log.d("AAAA","软键盘 弹出之后收起了 Rect GlobalLayoutListener heightDifference="+heightDifference+",mLastDiff="+mLastDiff);
                    if(inputMsgDialog!=null && inputMsgDialog.isShowing()){
                        inputMsgDialog.dismiss();
                    }
                }
                mLastDiff = heightDifference;

            }
        });

Escriba la descripción de la imagen aquí

En este punto, el problema anterior debe resolverse.

Supongo que te gusta

Origin blog.csdn.net/android_freshman/article/details/51713183
Recomendado
Clasificación