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:
Pregunta 1: el teclado virtual cubre el cuadro de diálogo
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
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;
}
});
En este punto, el problema anterior debe resolverse.