2011-04-17 18 views
5

Mi pregunta es muy simple, que estoy tratando de cambiar dinámicamente el ancho de este botón:cambiar dinámicamente el ancho de un botón en Android

Button> android: layout_height = "35dip" android: Fondo = "@ drawable/buttonlesson" android: text = "Nivel 3 [TAP AQUÍ]" android: onClick = "MenuLI1L3" android: layout_width = "300dp" android: id = "@ + id/II3">/Button "

Aquí está el código que utilizo:

Button myButton = (Button) findViewById(R.id.II3); 
myButton.setWidth(10); 
myButton.setText("kl"); 

El texto cambia, pero no el ancho. Parece que hay un error. Hay otro botón a la derecha que supone llenar el espacio cuando este botón se reduce a 10 píxeles, por lo que no puedo cambiar Linearlayout arriba también.

Cualquier explicación & solución? debería funcionar no? Gracias

Respuesta

0

Como sugerencia, intente llamar a invalidate() en la vista principal (lo que provocará invocaciones de dibujo a todos los elementos secundarios, incluido el botón). Es posible que esto no funcione porque lo que también necesita es que el botón vuelva a ejecutar su lógica onMeasure() (que se ejecuta antes del dibujo).

Juega con cualquiera de invalidación o cualquier otro método que hará que el padre invoque el onMeasure de los niños.

+2

¡Gracias por la sugerencia! invalidate() en la capa o en el botón no ha hecho nada ... pero myButton.bringToFront(); de alguna manera funcionó. – Simon

+0

No he jugado con bringToFront() pero no puedo evitar preguntarme si hace que el botón ejecute su onMeasure()? Bueno, al menos estás listo y trabajando. Bien hecho. – BonanzaDriver

2

Supongo que wrap_content no funciona para usted en su caso específico, ¿no? Si necesita ancho absoluto, entonces usted necesita para asignar que a través de nuevos LayoutParameters, es decir

myButton.setLayoutParams(new LinearLayout.LayoutParams(
    30 * someDensityFactor, LinearLayout.LayoutParams.WRAP_CONTENT 
)) 

donde el someDensityFactor es su densidad de pantalla (float). También es posible que deba invalidar su diseño para volver a pintar el botón.

+0

Gracias por los consejos, cuando lo hago, sin embargo, realmente hace que la aplicación se cuelgue ... – Simon

Cuestiones relacionadas