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.
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 biblioteca de soporte, debe usar ese valor como la altura de la barra de acción
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.
La respuesta de @ AZ13 es buena, pero de acuerdo con las pautas de diseño de Android , la barra de acción debe ser de al menos 48dp .
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:
- El nombre del atributo en sí está definido en /res/values/attrs.xml la plataforma /res/values/attrs.xml
- El themes.xml la plataforma elige este atributo y le asigna un valor.
- 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
Una de las muestras de Honeycomb se refiere a ?android:attr/actionBarSize