Android: Configurar la altura del botón en XML en función de su ancho
Estoy trabajando en el diseño en android XML en el que me gustaría establecer una altura de los botones para que coincida con su ancho cuando la configuración de llenar padre. 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. ¿Puede alguien ayudarme con conseguir el ancho del botón basado en el tamaño de la pantalla y después pasar eso a la configuración de la altura?
Gracias, Josh
- El servidor no pudo procesar su solicitud. El valor no puede ser nulo: análisis de jabón
- Mapa de bits de StateListDrawable y mosaico
- Utilice símbolo especial (<,>) en diseño de diseño en Android
- Cambiar el fondo de LinearLayout en Android
- Problemas con la carga de anuncios de AdMob en la aplicación
- cómo crear un xml utilizando xmlserializer en la aplicación android
- Mi aplicación no está visible en Google Play Store para Samsung Galaxy Note 4
- Clase no encontrada al desmarcar: android.support.v7.widget.Toolbar $ SavedState
- Android - xml - incluir el mismo diseño varias veces no funciona
- RadioGroup extendiendo RelativeLayout?
- Agregar vista al grupo de vistas xml existente en el código
- Los caracteres especiales no se muestran en android
- Error al analizar XML con el botón de facebook
Una vez tuve un problema similar y no encontré ninguna solución que funciona sólo desde XML. Tienes que escribir tu propio Button-Class y sobrescribir el onMeassure
[ 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)
En lugar de utilizar el tamaño de píxeles por PX, mención dip (es decir, píxeles independientes del dispositivo), inmersión tomará el tamaño en píxeles de acuerdo con el tamaño de pantalla del dispositivo de forma independiente.
Por ejemplo: android: textSize = "12dip"
Puede usar dip o dp .
¡¡Disfrutar!!
- Subida de imagen de forma paralela en el servidor S3
- Ejecutar Android App dos veces para trabajar, ¿por qué?