2010-10-15 10 views
5

Sto lavorando al layout in Android XML in cui vorrei impostare un'altezza dei pulsanti per abbinare la sua larghezza quando l'installazione per riempire genitore. Ovviamente questo numero cambierà in base alle dimensioni dello schermo, quindi non posso usare una dimensione di pixel impostata. Qualcuno può aiutarmi a ottenere l'ampiezza del pulsante in base alle dimensioni dello schermo e quindi a passare all'altezza?Android: impostazione altezza del pulsante in XML in base alla sua larghezza

Grazie, Josh

risposta

-1

Invece di usare dimensione del pixel da PX, parlare dip (cioè dispositivo pixel indipendente), dip prenderà la dimensione in pixel in base alle dimensioni dello schermo del dispositivo indipendente.

ad esempio: android: textSize = "12dip"

È possibile utilizzare tuffo o dp.

Divertiti !!

3

Una volta ho avuto un problema simile e non ho trovato alcuna soluzione che funzioni solo da XML. Devi scrivere la tua propria Button-Class e sovrascrivere il metodo [onMeassure] [1].

Esempio:

/** 
* @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)

Problemi correlati