¿Cuál es el tamaño de ActionBar en píxeles?

Necesito saber el tamaño exacto de ActionBar en píxeles para aplicar la imagen de fondo correcta.

Para recuperar la altura de ActionBar en XML, simplemente use

?android:attr/actionBarSize 

o si usted es un usuario de ActionBarSherlock o AppCompat, use esto

 ?attr/actionBarSize 

Si necesita este valor en tiempo de ejecución, use esto

 final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes( new int[] { android.R.attr.actionBarSize }); mActionBarSize = (int) styledAttributes.getDimension(0, 0); styledAttributes.recycle(); 

Si necesita entender dónde se define esto:

  1. El nombre del atributo en sí se define en /res/values/attrs.xml de la plataforma
  2. Theme.xml de la plataforma selecciona este atributo y le asigna un valor.
  3. El valor asignado en el paso 2 depende de diferentes tamaños de dispositivo, que se definen en varios archivos dimens.xml en la plataforma, es decir. core / res / res / values-sw600dp / dimens.xml

De las fonts comstackdas de framework-res.apk de Android 3.2, res/values/styles.xml contiene:

  

3.0 y 3.1 parecen ser los mismos (al menos de AOSP) …

Para obtener la altura real de la barra de acciones, debe resolver el atributo actionBarSize en tiempo de ejecución.

 TypedValue tv = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true); int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId); 

Una de las muestras de Honeycomb se refiere a ?android:attr/actionBarSize

Necesitaba replicar estas alturas correctamente en una aplicación de compatibilidad anterior a ICS y profundizar en la fuente central de framework . Ambas respuestas son correctas.

Básicamente se reduce a usar calificadores. La altura está definida por la dimensión “action_bar_default_height”

Está definido para 48 dips por defecto. Pero para -y es 40dip y para sw600dp es 56dip.

Si está utilizando la compatibilidad ActionBar del paquete de soporte de aplicación v7 reciente, puede obtener la altura usando

 @dimen/abc_action_bar_default_height 

Documentación

Con la nueva biblioteca de soporte de v7 (21.0.0), el nombre en R.dimen ha cambiado a @ dimen / abc_action_bar_default_height_ material .

Al actualizar desde una versión anterior de la lib de soporte, debe usar ese valor como la altura de la barra de acciones

Si está utilizando ActionBarSherlock, puede obtener la altura con

 @dimen/abs__action_bar_default_height 

La respuesta de @ AZ13 es buena, pero según las pautas de diseño de Android , la ActionBar debe tener al menos 48dp de alto .

El resumen de la clase suele ser un buen lugar para comenzar. Creo que el método getHeight () debería ser suficiente.

EDITAR:

Si necesita el ancho, debe ser el ancho de la pantalla (¿no?) Y eso se puede recostackr de esta manera .

En mi Galaxy S4 tengo> 441dpi> 1080 x 1920> Obtener la altura de la barra de acciones con getResources (). GetDimensionPixelSize Obtuve 144 píxeles.

Usando la fórmula px = dp x (dpi / 160), estaba usando 441dpi, mientras que mi dispositivo miente
en la categoría 480dpi. así que poner eso confirma el resultado.

Lo hice de esta manera para mí, este método de ayuda debería ser útil para alguien:

 private static final int[] RES_IDS_ACTION_BAR_SIZE = {R.attr.actionBarSize}; /** * Calculates the Action Bar height in pixels. */ public static int calculateActionBarSize(Context context) { if (context == null) { return 0; } Resources.Theme curTheme = context.getTheme(); if (curTheme == null) { return 0; } TypedArray att = curTheme.obtainStyledAttributes(RES_IDS_ACTION_BAR_SIZE); if (att == null) { return 0; } float size = att.getDimension(0, 0); att.recycle(); return (int) size; } 

La relación de pantalla es: 8.3: 100

ejemplo: si su pantalla es de 1024 píxeles, 84 será la altura de su barra de acción.