2010-10-15 9 views
5

Je travaille sur la mise en page dans Android XML dans lequel je voudrais définir une hauteur de boutons pour correspondre à sa largeur lors de la configuration pour remplir parent. Évidemment, ce nombre va changer en fonction de la taille de l'écran, donc je ne peux pas utiliser une taille de pixel définie. Est-ce que quelqu'un peut m'aider à obtenir la largeur du bouton en fonction de la taille de l'écran et à passer ensuite au réglage de la hauteur?Android: Réglage de la hauteur du bouton en XML en fonction de sa largeur

Merci, Josh

Répondre

-1

Au lieu d'utiliser la taille de pixel par PX, mentionner dip (à savoir dispositif de pixel indépendant), dip prendra la taille en pixel en fonction de la taille de l'écran de l'appareil indépendamment.

par exemple: android: textSize = "12dip"

Vous pouvez utiliser dip ou dp.

Profitez-en !!

3

J'ai déjà eu un problème similaire et je n'ai trouvé aucune solution qui fonctionne uniquement à partir de XML. Vous devez écrire votre propre classe de boutons et remplacer la méthode [onMeassure] [1].

Exemple:

/** 
* @see android.view.View#measure(int, int) 
*/ 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); 
} 

private int width; // saves the meassured width 


/** 
* Determines the width of this view 
* 
* @param measureSpec 
*   A measureSpec packed into an int 
* @return The width of the view, honoring constraints from measureSpec 
*/ 
private int measureWidth(int measureSpec) { 
    int result = 30; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     result =1123; // meassure your with here somehow 
     if (specMode == MeasureSpec.AT_MOST) { 
      // Respect AT_MOST value if that was what is called for by measureSpec 
      result = Math.min(result, specSize); 
     } 
    } 
      width = result; 
    return result; 
} 

/** 
* Determines the height of this view 
* 
* @param measureSpec 
*   A measureSpec packed into an int 
* @return The height of the view, honoring constraints from measureSpec 
*/ 
private int measureHeight(int measureSpec) { 
    int result = 0; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     result = width; 
     if (specMode == MeasureSpec.AT_MOST) { 
      // Respect AT_MOST value if that was what is called for by measureSpec 
      result = Math.min(result, specSize); 
     } 
    } 

    return result; 
} 

[1]: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)

Questions connexes