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


Respuestas:


558

Para recuperar la altura de ActionBar en XML, simplemente use

?android:attr/actionBarSize

o si eres un usuario de ActionBarSherlock o AppCompat, usa 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 comprender dónde se define esto:

  1. El nombre del atributo en sí está definido en /res/values/attrs.xml de la plataforma .
  2. Themes.xml de la plataforma elige 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

77
Gran respuesta. Sé la forma de cavar esta información, pero buscar esta respuesta fue mucho más rápido +1. Su respuesta también es una gran pista sobre cómo buscar esas cosas.
rekire 01 de

1
Gracias. Estaba tratando de usar @dimen/abc_action_bar_default_heightdirectamente (ActionBarComapt) y funcionó (en el dispositivo mdpi). Pero tratar de obtener este valor en Samsung Galaxy SIII me devolvió un valor incorrecto. Eso es porque values-xlarge(de alguna manera) es más preferido que values-landcuando está en modo horizontal. Hacer referencia al atributo en su lugar funciona como un encanto.
Alex Semeniuk

44
@ AZ13 Me gustaría agregar que android.R.attr.actionBarSizese resolverá en tamaño 0 en dispositivos anteriores a 3.0. Entonces, al usar ActionBarCompatuno, se apegaría a él en su android.support.v7.appcompat.R.attr.actionBarSizelugar.
Dibujó el

1
El chico lo preguntó en píxeles. Supongo que actionBarSize devuelve el valor dp. Obtuve el valor 48dp. Eso significa que convertirlo a píxeles me da 96 píxeles para xhdpi.
Muhammad

"android.R.attr.actionBarSize" no funciona en la versión 2.3 de Android, pero "R.attr.actionBarSize" funciona en todas las versiones de Android. simplemente use "R.attr.actionBarSize" en lugar de "android.R.attr.actionBarSize" y etc.
Nathaniel Jobs

59

De las fuentes descompiladas de Android 3.2 framework-res.apk, res/values/styles.xmlcontiene:

<style name="Theme.Holo">
    <!-- ... -->
    <item name="actionBarSize">56.0dip</item>
    <!-- ... -->
</style>

3.0 y 3.1 parecen ser lo mismo (al menos desde AOSP) ...


1
¿Qué pasa con la altura diferente de la barra de acción en el paisaje?
Manfred Moser

86
en 4.0+: el valor predeterminado es 48dp, el paisaje es 40dp, sw600dp es 56dp
Jake Wharton

19
¡Es por eso que debe usar el valor android: attr y no un valor codificado!
Vikram Bodicherla

45

Para obtener la altura real de la barra de acción, debe resolver el atributo actionBarSizeen tiempo de ejecución.

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

33

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



3
Esta es la respuesta si su min sdk es> = 11, si su min es <11, entonces lo más probable es que esté usando ABS, entonces esta es la solución: @ dimen / abs__action_bar_default_height
Adam

9
ABS tiene ?attr/actionBarSize(tenga en cuenta la falta de espacio de nombres de Android) que funciona en todos los niveles de API.
Jake Wharton

21

Necesitaba replicar estas alturas correctamente en una aplicación de compatibilidad anterior a ICS y buscar en la fuente central del marco . Ambas respuestas anteriores son más o menos correctas.

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

Está definido en 48dip por defecto. Pero para tierra es 40dip y para sw600dp es 56dip.


17

Si está utilizando la barra de acciones de compatibilidad del reciente paquete de soporte de v7 appcompat, puede obtener la altura usando

@dimen/abc_action_bar_default_height

Documentación



9

Si está utilizando ActionBarSherlock, puede obtener la altura con

@dimen/abs__action_bar_default_height

No use abs__recursos prefijados directamente.
Jake Wharton

2
@JakeWharton, por favor dinos cómo hacerlo correctamente, entonces.
JesperB

Crea tu propia dimensión para no depender de abs_.
Codeversed


1
public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv,
                true))
            actionBarHeight = TypedValue.complexToDimensionPixelSize(
                    tv.data, getResources().getDisplayMetrics());
    } else {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
                getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

0

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 (¿verdad?) Y eso se puede reunir de esta manera .


2
Extraño - getHeight () resulta en cero.
Eugene

1
En mi desarrollo, noté que devuelve cero en onResume (). Pase el mouse al llamar a getActionBar (). GetHeight () cuando realmente lo necesite, devuelve un valor positivo> 0.
Tos

@tos la especificación para getHeight () dice que devuelve el ancho actual de ActionBar, que probablemente sea 0 cuando se crea la vista
Nombre para mostrar

0

En mi Galaxy S4 que tiene> 441 ppp> 1080 x 1920> Obtener la altura de la barra de acción con getResources (). GetDimensionPixelSize Obtuve 144 píxeles.

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


0

Lo hice de esta manera por mí mismo, este método auxiliar 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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.