¿Cuál es la altura de la barra de estado en Android? ¿Es siempre lo mismo?
Según mis mediciones, parece que son 25dp, pero no estoy seguro de si tiene la misma altura en todas las plataformas.
(Quiero saber esto para implementar correctamente una transición de desvanecimiento de una actividad que no tiene barra de estado a una que sí la tenga)
Respuestas:
esta pregunta fue respondida antes ... Altura de la barra de estado?
Actualización ::
Método actual:
ok, la altura de la barra de estado depende del tamaño de la pantalla, por ejemplo, en un dispositivo con un tamaño de pantalla de 240 X 320, la altura de la barra de estado es de 20 px, para un dispositivo con un tamaño de pantalla de 320 X 480, la altura de la barra de estado es de 25 px, para un dispositivo con 480 x 800, la altura de la barra de estado debe ser de 38 px
así que recomiendo usar este script para obtener la altura de la barra de estado
(Método antiguo) para obtener la Altura de la barra de estado en el
onCreate()
método de su Actividad, use este método:fuente
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)
no es una forma correcta de obtener la altura de la barra de estado si está en modo de ventanas múltiples + rotación vertical + segunda ventana. Obtendrá un gran valor (incluya la primera altura).De todos los ejemplos de código que he usado para obtener la altura de la barra de estado, el único que realmente parece funcionar en el
onCreate
método de unActivity
es este:Aparentemente, la altura real de la barra de estado se mantiene como un recurso de Android. El código anterior se puede agregar a una
ContextWrapper
clase (por ejemplo, anActivity
).Encontrado en http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/
fuente
En dispositivos MDPI, la barra de estado es de 25 px. Podemos usar esto como base y multiplicarlo por la densidad (redondeada) para obtener la altura de la barra de estado en cualquier dispositivo:
Para referencia: ldpi = .75, mdpi = 1, hdpi = 1.5, xhdpi = 2
fuente
Codificar el tamaño o usar la reflexión para obtener el valor de
status_bar_height
se considera una mala práctica. Chris Banes habló sobre esto en el Droidcon New York . La forma recomendada de obtener el tamaño de la barra de estado es a través de OnApplyWindowInsetsListener :Esto se agregó en API 20 y también se respalda a través de ViewAppCompat .
fuente
He fusionado algunas soluciones juntas:
otra alternativa:
EDITAR: alternativa a runJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126
fuente
De acuerdo con las pautas de diseño de Google ; La altura de la barra de estado es de 24 dp.
Si desea obtener la altura de la barra de estado en píxeles, puede usar el siguiente método:
que se puede llamar desde la actividad con:
fuente
La altura predeterminada solía ser 25dp. Con Android Marshmallow (API 23) la altura se redujo a 24dp.
Actualización: Tenga en cuenta que desde que comenzó la era de las muescas y las cámaras de perforación completa, el uso de una altura estática para la barra de estado ya no funciona. Por favor, use inserciones de ventana en su lugar!
fuente
esto también funciona con la referencia enlace de
fuente
Tengo el mismo problema de tener que obtener la altura de la barra de estado en un onCreate. Esto funciona para mi.
Dentro de onCreate:
Ver:
http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
fuente
La altura oficial es
24dp
, como lo declara oficialmente Google en la página web de Android Design .fuente
Sí, cuando lo pruebo con View, proporciona el resultado de 25px. Aquí está el código completo:
fuente
fuente
Prueba esto:
no funcionó para mí en el método onCreate para la actividad, pero funcionó cuando lo puse en un onClickListener y me dio una medida de 25
fuente
la altura de la barra de estado es de 24dp en android 6.0
puede encontrar la respuesta en el código fuente: frameworks \ base \ core \ res \ res \ values \ dimens.xml
fuente
@android:dimen/status_bar_height
no funciona para míPara resolver esto, utilicé un enfoque combinado. Esto es necesario ya que en las tabletas la barra del sistema ya resta sus píxeles cuando se llama a display.getHeight (). Así que primero verifico si hay una barra del sistema, y luego el enfoque de Ben Clayton, que funciona bien en los teléfonos.
fuente
Gracias a @Niklas +1 esta es la forma correcta de hacerlo.
Por favor, discúlpeme si el código no es 100% correcto, lo convirtió de Xamarin C #, pero esto es justo. Funciona con muescas, etc.
fuente
Solución de pantalla completa conmutada:
Esta solución puede parecer una solución alternativa, pero en realidad explica si su aplicación es de pantalla completa (también conocida como ocultar la barra de estado) o no:
De esta manera, si su aplicación está actualmente en pantalla completa,
barheight
será igual a 0.Personalmente, tuve que usar esto para corregir las coordenadas absolutas de TouchEvent para tener en cuenta la barra de estado de la siguiente manera:
Y eso obtendrá la coordenada y absoluta, ya sea que la aplicación sea de pantalla completa o no.
Disfrutar
fuente
En Android 4.1 y versiones posteriores, puede configurar el contenido de su aplicación para que aparezca detrás de la barra de estado, de modo que el contenido no cambie de tamaño a medida que la barra de estado se oculta y muestra. Para hacer esto, use SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Es posible que también deba usar SYSTEM_UI_FLAG_LAYOUT_STABLE para ayudar a que su aplicación mantenga un diseño estable.
Cuando utiliza este enfoque, se convierte en su responsabilidad asegurarse de que las partes críticas de la interfaz de usuario de su aplicación (por ejemplo, los controles integrados en una aplicación de Mapas) no terminen siendo cubiertas por las barras del sistema. Esto podría hacer que su aplicación sea inutilizable. En la mayoría de los casos, puede manejar esto agregando el atributo android: fitsSystemWindows a su archivo de diseño XML, establecido en verdadero. Esto ajusta el relleno del ViewGroup primario para dejar espacio para las ventanas del sistema. Esto es suficiente para la mayoría de las aplicaciones.
Sin embargo, en algunos casos, es posible que deba modificar el relleno predeterminado para obtener el diseño deseado para su aplicación. Para manipular directamente cómo se presenta su contenido en relación con las barras del sistema (que ocupan un espacio conocido como "insertos de contenido" de la ventana), anule fitSystemWindows (insertos Rect). La jerarquía de vistas llama al método fitSystemWindows () cuando las inserciones de contenido de una ventana han cambiado, para permitir que la ventana ajuste su contenido en consecuencia. Al anular este método, puede manejar las inserciones (y, por lo tanto, el diseño de su aplicación) como desee.
formulario: https://developer.android.com/training/system-ui/status.html#behind
fuente
Si sabes exactamente el tamaño VS altura
me gusta
por ejemplo, en un dispositivo con un tamaño de pantalla de 320 X 480, la altura de la barra de estado es de 25 px, para un dispositivo con 480 x 800 la altura de la barra de estado debe ser de 38 px
entonces puede obtener el ancho de su vista / el tamaño de la pantalla, puede usar una instrucción if else para obtener la altura de la barra de estado
fuente
La razón por la cual la respuesta principal no funciona para algunas personas es porque no puede obtener las dimensiones de una vista hasta que esté lista para renderizarse. Use un
OnGlobalLayoutListener
para obtener dichas dimensiones cuando realmente pueda:Este es el método más confiable.
fuente
Dado que el modo de ventanas múltiples está disponible ahora, es posible que su aplicación no tenga la barra de estado en la parte superior.
La siguiente solución maneja todos los casos automáticamente por usted.
o programáticamente
También puede obtener vista de raíz por
Para obtener más detalles sobre cómo obtener la vista raíz, consulte: https://stackoverflow.com/a/4488149/9640177
fuente
Este problema recientemente se volvió relevante para mí debido a la muesca en mi Pixel 3XL. Realmente me gustó la solución de desarrollador de Android , pero quería poder obtener la altura de la barra de estado a voluntad, ya que era específicamente necesario para una animación de pantalla completa que necesitaba jugar. La siguiente función permitió una consulta confiable:
Y luego en la clase de actividad:
Por supuesto, querrá hacer pasar una referencia débil de la actividad al parámetro del método de la clase Helper estática, pero por razones de brevedad me abstuve en este ejemplo. Los
blurBitmap
yerrorHudFrameLayout
se omiten por el mismo motivo, ya que no pertenecen directamente a la obtención de la altura de la barra de estado.fuente
Versión de Kotlin que combina dos mejores soluciones.
status_bar_height
valor si está presentestatus_bar_height
no está presente, calcula la altura de la barra de estado a partir de la decoración de la ventanafuente