studio - El teclado suave de Android oculta entradas de CordovaWebView cuando está en pantalla completa
pantalla completa android sin root (3)
Tengo el mismo problema y descubrí que es un error bien conocido.
Una solución podría ser que usted escriba un complemento que deshabilita la pantalla completa justo antes de que el teclado aparezca y lo vuelva a habilitar después.
Tengo un CordovaWebView que presenta algunos formularios html. Cuando me concentro en un campo de entrada, aparece el teclado virtual de Android y, para ciertos campos, de acuerdo con su posición, se pone encima de él. Básicamente, no está redimensionando el diseño de CordovaWebView.
Cualquier cosa que haga, no puedo cambiar esto, y se dice que está relacionado con el hecho de que CordovaWebView está en modo de pantalla completa.
¿Cómo puedo lograr resolver esto?
PD: ¿es, o no, un error?
¡Gracias a todos!
De hecho, es un error bien conocido, como dijo @ user2493245. Pero encontré una solución alternativa, al menos con respecto a mi caso específico.
en WebView, solo verifique las coordenadas del área visible de la Vista.
final View activityRootView = this.root;
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if(heightDiff != lastValue) {
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
appView.sendJavascript("onKeyBoardShow(" + r.bottom + ");");
} else {
appView.sendJavascript("onKeyBoardHide();");
}
lastValue = heightDiff;
}
}
});
Como puede ver, envío esa información a WebView. En HTML, tengo estos dos métodos para manejar el problema:
function onKeyBoardShow(bottom) {
var diff = ($(''input[type=text]:focus'').offset().top - bottom) + 50;
if(diff > 0) {
$(''body'').css("top", (diff * -1) + "px");
}
};
function onKeyBoardHide() {
$(''body'').css("top", "0px");
};
Básicamente, onKeyBoardShow, enfoca el campo de entrada y calcula la cantidad de píxeles que serán necesarios para mover el cuerpo, lo que permite al usuario ver el campo de entrada. onKeyBoardHide, simplemente pone el cuerpo en su posición original.
PD: Esto solo funciona cuando la ventana gráfica apunta a devicedpi, ya que necesitamos modificar la forma en que obtenemos la diferencia con respecto al dpi del dispositivo.
PS2: la primera cantidad de código no es mía, solo edité para llenar mis necesidades. Vi eso en una pregunta de SO, pero desafortunadamente ahora no puedo encontrarlo. Si lo encuentro, publicaré el enlace aquí.
Elimina android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
del manifiesto y agrega estas 2 líneas de código:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
Asegúrate de que tu método onCreate tenga este aspecto:
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
// Your code ...
}
Y todo funcionará: D.