Altura de la barra de estado en Android

¿Cuál es la altura de la barra de estado en Android? ¿Siempre es lo mismo?

De mis medidas parece que es 25dp, pero no estoy seguro 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 uno que sí)

Esta pregunta fue respondida antes de … Altura de la barra de estado?

Actualizar ::

Método actual:

Ok, la altura de la barra de estado depende del tamaño de la pantalla, por ejemplo en un dispositivo con tamaño de pantalla 240 x 320 la altura de la barra de estado es 20px, para un dispositivo con 320 x 480 tamaño de pantalla la altura de la barra de estado es 25px, Dispositivo con 480 x 800 la altura de la barra de estado debe ser 38px

Así que recomiendo usar este script para obtener la altura de la barra de estado

Rect rectangle = new Rect(); Window window = getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rectangle); int statusBarHeight = rectangle.top; int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int titleBarHeight= contentViewTop - statusBarHeight; Log.i("*** Elenasys :: ", "StatusBar Height= " + statusBarHeight + " , TitleBar Height = " + titleBarHeight); 

(Método antiguo) para obtener la altura de la barra de estado en el método onCreate() de su actividad, utilice este método:

 public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } 

De todos los ejemplos de código que he utilizado para obtener la altura de la barra de estado, la única que realmente parece funcionar en el método onCreate de una Activity es la siguiente:

 public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } 

Al parecer, la altura real de la barra de estado se mantiene como un recurso de Android. El código anterior se puede agregar a una clase ContextWrapper (por ejemplo, una Activity ).

Encontrado en http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/

En dispositivos MDPI, la barra de estado es 25px. Podemos usar esto como base y multiplicarlo por la densidad (redondeado) para obtener la altura de la barra de estado en cualquier dispositivo:

 int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density); 

Para referencia: ldpi = 0,75, mdpi = 1, hdpi = 1,5, xhdpi = 2

De acuerdo con las directrices de diseño de Google ; Altura de la barra de estado es de 24 dp.

Si desea obtener la altura de la barra de estado en píxeles, puede utilizar el siguiente método:

 private static int statusBarHeight(android.content.res.Resources res) { return (int) (24 * res.getDisplayMetrics().density); } 

Que se puede llamar de la actividad con:

 statusBarHeight(getResources()); 

He combinado algunas soluciones juntas:

 public static int getStatusBarHeight(final Context context) { final Resources resources = context.getResources(); final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) return resources.getDimensionPixelSize(resourceId); else return (int) Math.ceil((VERSION.SDK_INT >= VERSION_CODES.M ? 24 : 25) * resources.getDisplayMetrics().density); } 

Otra alternativa:

  final View view = findViewById(android.R.id.content); runJustBeforeBeingDrawn(view, new Runnable() { @Override public void run() { int statusBarHeight = getResources().getDisplayMetrics().heightPixels - view.getMeasuredHeight(); } }); 

Esto también funciona con el enlace refrence

 public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } 

Tengo el mismo problema de tener que conseguir la altura de la barra de estado en un onCreate. Esto funciona para mí.

 private static final int LOW_DPI_STATUS_BAR_HEIGHT = 19; private static final int MEDIUM_DPI_STATUS_BAR_HEIGHT = 25; private static final int HIGH_DPI_STATUS_BAR_HEIGHT = 38; 

Dentro de la onCreate:

 DisplayMetrics displayMetrics = new DisplayMetrics(); ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displayMetrics); int statusBarHeight; switch (displayMetrics.densityDpi) { case DisplayMetrics.DENSITY_HIGH: statusBarHeight = HIGH_DPI_STATUS_BAR_HEIGHT; break; case DisplayMetrics.DENSITY_MEDIUM: statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT; break; case DisplayMetrics.DENSITY_LOW: statusBarHeight = LOW_DPI_STATUS_BAR_HEIGHT; break; default: statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT; } 

Ver:

http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

Sí, cuando lo intento con Ver que proporciona el resultado de 25px. Aquí está el código completo:

 public class SpinActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout lySpin = new LinearLayout(this); lySpin.setOrientation(LinearLayout.VERTICAL); lySpin.post(new Runnable() { public void run() { Rect rect = new Rect(); Window window = getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rect); int statusBarHeight = rect.top; int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int titleBarHeight = contentViewTop - statusBarHeight; System.out.println("TitleBarHeight: " + titleBarHeight + ", StatusBarHeight: " + statusBarHeight); } } } } 

La altura oficial es de 24dp , como se indica oficialmente por Google en la página web de diseño de Android .

240×320 – 20px 320×480 – 25px 480×800 + – 38 píxeles

La altura predeterminada solía ser 25dp. Con Android Marshmallow (API 23) la altura se redujo a 24dp.

Prueba esto:

  Rect rect = new Rect(); Window win = this.getWindow(); win.getDecorView().getWindowVisibleDisplayFrame(rect); int statusBarHeight = rect.top; int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int titleBarHeight = contentViewTop - statusBarHeight; Log.d("ID-ANDROID-CONTENT", "titleBarHeight = " + titleBarHeight ); 

No funcionó para mí en el método onCreate para la actividad, pero lo hice cuando lo puse en un onClickListener y me dio una medida de 25

Para resolver esto, usé un enfoque de combinación. Esto es necesario como en las tabletas la barra del sistema ya se resta de los píxeles cuando display.getHeight () se llama. Así que primero comprobar si una barra del sistema está presente, y luego Ben Claytons enfoque, que funciona bien en los teléfonos.

 public int getStatusBarHeight() { int statusBarHeight = 0; if (!hasOnScreenSystemBar()) { int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { statusBarHeight = getResources().getDimensionPixelSize(resourceId); } } return statusBarHeight; } private boolean hasOnScreenSystemBar() { Display display = getWindowManager().getDefaultDisplay(); int rawDisplayHeight = 0; try { Method getRawHeight = Display.class.getMethod("getRawHeight"); rawDisplayHeight = (Integer) getRawHeight.invoke(display); } catch (Exception ex) { } int UIRequestedHeight = display.getHeight(); return rawDisplayHeight - UIRequestedHeight > 0; } 

La altura de la barra de estado es 24dp en android 6.0

  <!-- Height of the status bar --> <dimen name="status_bar_height">24dp</dimen> <!-- Height of the bottom navigation / system bar. --> <dimen name="navigation_bar_height">48dp</dimen> 

Puede encontrar la respuesta en el código fuente: frameworks \ base \ core \ res \ res \ valores \ dimens.xml

Solución de pantalla completa con conmutación:

Esta solución puede parecer una solución, pero en realidad explica si su aplicación está en pantalla completa (también escondiendo la barra de estado) o no:

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int barheight = size.y - findViewById(R.id.rootView).getHeight(); 

De esta manera, si su aplicación está 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:

 @Override public boolean onTouch(View view,MotionEvent event) { Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int YCoord = (int)event.getRawY() - size.y + rootView.getHeight()); } 

Y eso obtendrá la coordenada y absoluta si la aplicación es de pantalla completa o no.

Disfrutar

Si usted sabe exactamente el tamaño VS altura

me gusta

Por ejemplo en un dispositivo con 320 X 480 tamaño de pantalla la altura de la barra de estado es 25px, para un dispositivo con 480 x 800 la altura de la barra de estado debe ser 38px

Entonces sólo puede obtener el ancho de su vista / el tamaño de la pantalla sólo puede utilizar una instrucción if else para obtener la altura de la barra de estado

La razón por la cual la respuesta superior no funciona para algunas personas es porque no se pueden obtener las dimensiones de una vista hasta que esté lista para procesar. Usa un OnGlobalLayoutListener para obtener dichas dimensiones cuando puedas:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ViewGroup decorView = (ViewGroup) this.getWindow().getDecorView(); decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT >= 16) { decorView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } else { // Nice one, Google decorView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); rect.top; // This is the height of the status bar } } } 

Este es el método más confiable.

  • Android ListView Lista de estado que no muestra el fondo del elemento predeterminado
  • Android: Compruebe si el servicio se está ejecutando a través de. BindService
  • Agregar información de velocidad de red en la barra de estado
  • Android: state_enabled falta / no funciona?
  • ¿Por qué no puedo encontrar una referencia a la clase StatusBarManager directamente?
  • ¿Cómo no guardar el estado de la vista en Android?
  • Barra de estado personalizada
  • Cómo ocultar StatusBar en Android 4
  • Detectando la llamada saliente y el evento de hangup de llamada en android
  • Android - ¿Cómo manejar correctamente los métodos onPause / onResume?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.