studio sgoliver personalizar herramientas busqueda barra bar actionbar android android-actionbar

android - personalizar - sgoliver toolbar



¿Cuál es el tamaño de la barra de acción en píxeles? (13)

Necesito saber el tamaño exacto de la barra de acción en píxeles para aplicar la imagen de fondo correcta.



De las fuentes framework-res.apk de framework-res.apk de Android 3.2, 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 de AOSP) ...


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 se puede reunir de esta manera .


En mi Galaxy S4 con> 441dpi> 1080 x 1920> Obtención de 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 poniendo eso confirma el resultado.


La relación de pantalla es: 8.3: 100

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



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; }


Necesitaba replicar estas alturas correctamente en una aplicación de compatibilidad pre-ICS y cavé en la fuente central del marco . Ambas respuestas son correctas.

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

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


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);


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 este

?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 necesitas entender donde esta definido:

  1. El nombre del atributo en sí está definido en /res/values/attrs.xml la plataforma /res/values/attrs.xml
  2. El themes.xml la plataforma elige este atributo y le asigna un valor.
  3. El valor asignado en el paso 2 depende de los 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

Si está utilizando ActionBarSherlock, puede obtener la altura con

@dimen/abs__action_bar_default_height


Si está utilizando la barra de compatibilidad de la reciente aplicación v7 appcompat support package, puede obtener la altura utilizando

@dimen/abc_action_bar_default_height

Documentation


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