¿Hay alguna forma en Android para obtener la altura del teclado virtual del dispositivo

¿Hay alguna manera en Android para obtener la altura del teclado virtual del dispositivo Android en tiempo de ejecución. De hecho, quiero mostrar el cuadro de texto arriba del teclado.

Sí, puedes, con la ayuda de Viewtree Observer y el oyente de diseño global, simplemente prueba los pasos mencionados a continuación

  1. Obtenga la vista raíz de su diseño
  2. obtenga el observador de Viewtree para esta raíz y agregue un oyente de diseño global encima de esto.

ahora, siempre que se muestre el teclado suave, Android cambiará el tamaño de su pantalla y recibirá una llamada en su oyente. Eso es lo único que ahora debe hacer es calcular la diferencia entre la altura que tiene su vista de raíz después de cambiar el tamaño y el tamaño original. Si la diferencia es más de 150, considere esto ya que se ha inflado un teclado.

A continuación se muestra un código de muestra

root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){ public void onGlobalLayout(){ int heightDiff = root.getRootView().getHeight()- root.getHeight(); // IF height diff is more then 150, consider keyboard as visible. } }); 

Saludos, Techfist

Intenté muchos métodos sugeridos para esto, pero ninguno parecía funcionar para Android SDL. Creo que esto se debe a que la pantalla SDL está “a pantalla completa” o que se encuentra dentro de un “AbsoluteLayout” y, por lo tanto, la altura de la “Vista” nunca cambia realmente. Este método funcionó para mi:

Obteniendo las dimensiones del teclado suave

 mRootWindow = getWindow(); mRootView = mRootWindow.getDecorView().findViewById(android.R.id.content); mRootView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout(){ Rect r = new Rect(); View view = mRootWindow.getDecorView(); view.getWindowVisibleDisplayFrame(r); // r.left, r.top, r.right, r.bottom } }); 

Para resolver esto he escrito un keyboardHeightProvider que puede calcular la altura de un teclado flotante. La actividad se puede configurar para ajustarNone o adjustPan en AndroidManifest.xml.

https://github.com/siebeprojects/samples-keyboardheight

Siebe

coloque el cuadro de texto como parte inferior del padre.

 android:layout_alignParentBottom="true" 

y en el archivo de manifiesto hacer la entrada suave adjustresize el adjustresize

 android:windowSoftInputMode="adjustResize" 

luego, el cuadro de texto se moverá hacia arriba cuando aparezca el teclado.

No puedes decir. No, realmente: simplemente no puedes decirlo.

El teclado no necesita tener una forma particular. No tiene que colocarse en la parte inferior de la pantalla ( muchas de las opciones más populares no lo están ), no tiene que mantener su tamaño actual cuando se cambian los campos de texto (casi ninguno lo hace dependiendo de los indicadores). Ni siquiera tiene que ser rectangular . También puede simplemente tomar el control de toda la pantalla .

(copia de mi respuesta sobre una pregunta similar, Cómo obtener las dimensiones del teclado virtual )

Mi solución es la combinación de todas las soluciones anteriores. Esta solución también es hacky pero resuelve el problema (al menos para mí).

  1. Tengo lugares en vista temporal con fondo transparente en la parte inferior de la pantalla.
  2. He agregado el android:windowSoftInputMode="adjustResize" en la etiqueta de actividad en el manifiesto como @bill sugiere.
  3. Ahora la historia principal está onGlobalLayout() . Allí calculo la diferencia entre el eje y de la vista temporal y la altura de la vista raíz

     final View view = findViewById(R.id.base); view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int rootViewHeight = view.getRootView().getHeight(); View tv = findViewById(R.id.temp_view); int location[] = new int[2]; tv.getLocationOnScreen(location); int height = (int) (location[1] + tv.getMeasuredHeight()); deff = rootViewHeight - height; // deff is the height of soft keyboard } }); 

Pero de todos modos para resolver el problema de @ zeeshan0026 solo una bandera en el manifiesto android:windowSoftInputMode="adjustResize" es suficiente.

¡No busques más! He estado buscando una solución para esto durante mucho tiempo. Después de varios días probando todos los trucos sugeridos en SOF, encontré la solución perfecta que realmente funciona.

Este proyecto de GitHub lo demuestra de la mejor manera posible: https://github.com/siebeprojects/samples-keyboardheight

¡Que te diviertas!

Lo he usado para obtener la altura del teclado programáticamente en android y lo he probado, por favor intente esto una vez:

 myLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub Rect r = new Rect(); parent.getWindowVisibleDisplayFrame(r); int screenHeight = parent.getRootView().getHeight(); int heightDifference = screenHeight - (r.bottom - r.top); Log.d("Keyboard Size", "Size: " + heightDifference); //boolean visible = heightDiff > screenHeight / 3; } }); 

Gracias.