2010-10-15 12 views
5

Estoy trabajando en el diseño en Android XML en el que me gustaría establecer una altura de botones para que coincida con su ancho cuando se configura para llenar el elemento principal. Obviamente, este número cambiará en función del tamaño de la pantalla, por lo que no puedo usar un tamaño de píxel establecido. ¿Alguien puede ayudarme a obtener el ancho del botón en función del tamaño de la pantalla y luego pasarlo a la configuración de altura?Android: Configuración del alto del botón en XML en función de su ancho

gracias, Josh

Respuesta

-1

En lugar de utilizar el tamaño de píxel por PX, mencionar inmersión (es decir, dispositivo de píxeles independientes), inmersión tomará el tamaño en píxeles de acuerdo con el tamaño de la pantalla del dispositivo de forma independiente.

por ejemplo: android: TEXTSIZE = "12dip"

Puede utilizar inmersión o dp.

¡Disfrútalo!

3

Una vez tuve un problema similar y no encontré ninguna solución que funcione solo desde XML. Debe escribir su propia clase de botón y sobrescribir el método [onMeassure] [1].

Ejemplo:

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

Cuestiones relacionadas