J'ai besoin de connaître la taille exacte de l'ActionBar en pixels pour appliquer une image d'arrière-plan correcte.
Pour récupérer la hauteur de la barre d’action en XML, utilisez simplement
?android:attr/actionBarSize
ou si vous êtes un utilisateur ActionBarSherlock ou AppCompat, utilisez cette
?attr/actionBarSize
Si vous avez besoin de cette valeur à l'exécution, utilisez ceci
final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
new int[] { Android.R.attr.actionBarSize });
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();
Si vous avez besoin de comprendre où cela est défini:
À partir des sources décompilées de Android 3.2, framework-res.apk
, res/values/styles.xml
3.2 contient:
<style name="Theme.Holo">
<!-- ... -->
<item name="actionBarSize">56.0dip</item>
<!-- ... -->
</style>
3.0 et 3.1 semblent être les mêmes (du moins de l'AOSP) ...
Pour obtenir la hauteur réelle de la barre d’action, vous devez résoudre l’attribut actionBarSize
au moment de l’exécution.
TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(Android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
Un des échantillons de Honeycomb fait référence à ?android:attr/actionBarSize
J'avais besoin de reproduire correctement ces hauteurs dans une application de compatibilité pré-ICS et de creuser dans le source de base du framework . Les deux réponses ci-dessus sont en quelque sorte correctes.
Cela revient essentiellement à utiliser des qualificatifs. La hauteur est définie par la dimension "action_bar_default_height"
Il est défini sur 48dip par défaut. Mais pour -land c'est 40dip et pour sw600dp c'est 56dip.
Si vous utilisez le composant ActionBar de compatibilité du package de prise en charge v7 appcompat récent, vous pouvez obtenir la hauteur à l'aide de
@dimen/abc_action_bar_default_height
Avec la nouvelle bibliothèque de support v7 (21.0.0), le nom dans R.dimen
a été remplacé par @ dimen/abc_action_bar_default_height _ matériau .
Lors de la mise à niveau à partir d'une version précédente de la bibliothèque de support, vous devez donc utiliser cette valeur comme hauteur de la barre d'actions.
Si vous utilisez ActionBarSherlock, vous pouvez obtenir la hauteur avec
@dimen/abs__action_bar_default_height
La réponse de @ AZ13 est bonne, mais selon les directives de conception d'Android , le ActionBar devrait être au moins 48dp de haut .
Sur mon Galaxy S4 ayant> 441 dpi> 1080 x 1920> Obtention de la hauteur de la barre d’action avec getResources (). GetDimensionPixelSize J’ai obtenu 144 pixels.
En utilisant la formule px = dp x (dpi/160), j’utilisais 441dpi, alors que mon appareil se trouve
dans la catégorie 480dpi. si bien que cela confirme le résultat.
Le Résumé de la classe est généralement un bon point de départ. Je pense que la méthode getHeight () devrait suffire.
MODIFIER:
Si vous avez besoin de la largeur, ce devrait être la largeur de l'écran (non?) Et que vous pouvez rassembler comme ceci .
J'ai fait de cette manière pour moi-même, cette méthode d'assistance devrait être utile pour quelqu'un:
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;
}