¿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.

Author: Jonik, 2011-08-23

13 answers

Para recuperar la altura de la barra de acción 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 este

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 se define en el /res/values/attrs de la plataforma.xml
  2. Los temas de la plataforma.xml selecciona este atributo y le asigna un valor.
  3. El el valor asignado en el paso 2 depende de diferentes tamaños de dispositivo, que se definen en varias dimensiones.archivos xml en la plataforma, es decir. core/res/res / values-sw600dp/dimens.xml
 493
Author: AZ13,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-29 22:26:41

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

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

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

 50
Author: Jake Wharton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-24 07:50:53

Para obtener la altura real de la barra de acción, 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);
 40
Author: David Boho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 09:04:25

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

 32
Author: Vikram Bodicherla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-26 03:42:05

Necesitaba replicar estas alturas correctamente en una aplicación de compatibilidad pre-ICS y profundizar en el framework core source. Ambas respuestas anteriores son más o menos correctas.

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

Se define como 48dip por defecto. Pero para-land es 40dip y para sw600dp es 56dip.

 20
Author: Manfred Moser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-27 21:14:35

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

@dimen/abc_action_bar_default_height

Documentación

 17
Author: flawedmatrix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-15 12:09:50

Con la nueva biblioteca de soporte 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 librería de soporte, debe usar ese valor como la altura de la barra de acción

 16
Author: MrMaffen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-23 00:48:15

Si está utilizando ActionBarSherlock, puede obtener la altura con

@dimen/abs__action_bar_default_height
 9
Author: JesperB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-20 11:06:03

La respuesta de

@AZ13 es buena, pero según las pautas de diseño de Android, la barra de acción debe ser al menos 48dp high.

 4
Author: aaronsnoswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-26 04:05:02

El Resumen de la clase suele ser un buen punto de partida. Creo que el método getHeight() debería ser suficiente.

EDITAR:

Si necesita el ancho, debe ser el ancho de la pantalla (¿correcto?) y eso se puede reunir así.

 0
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:24

En mi Galaxy S4 tener > 441dpi > 1080 x 1920 > Obteniendo la altura de la barra de acción con getResources ().getDimensionPixelSize Tengo 144 píxeles.

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

 0
Author: Muhammad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-16 19:08:40

Lo hice de esta manera para mí mismo, 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;
}
 0
Author: Min2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-11 06:04:07

La relación de pantalla es: 8.3: 100

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

 -1
Author: Tushar Pandey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-04 11:36:50