2011-10-14 22 views
10

Tengo una vista personalizada muy simple con onMeasure() anulada. Mi onMeasure() decide el tamaño de acuerdo con el fondo Drawable. Cuando la vista se crea por primera vez desde xml todo funciona normalmente. Pero luego configuré un fondo diferente programáticamente, por lo que la Vista debería redimensionarse. La vista ahora tiene un fondo diferente, pero no cambia de tamaño y no se llama al onMeasure().View.onMeasure() no se llama

He intentado todo - requestLayout(), forceLayout(), invalidate(), setLayoutParams() - sin ningún efecto. ¿Qué estoy haciendo mal? Solo quiero que mi Vista cambie de tamaño.

Respuesta

-2

¿Has probado lo obvio, es decir, cómo se declara tu método?

Si no agregó la anotación @override, agréguela y vea si su compilador le indica que no está anulando nada. Si es así, verifique el nombre y la firma del método de onMeasure.

De lo contrario, asegúrese de entender cuándo se supone que se llama el método measure(): How Android draws Views.

+0

Sí, estoy usando @Override - Veo que my onMeasure() se llama dos veces cuando se crea mi actividad. Pero no se llama después de View.setBackground(). – fhucho

+0

El artículo que ha vinculado sugiere que requestLayout() debería funcionar, pero no es así. – fhucho

1

El problema era que estaba llamando a setBackground() dentro de mi View onSizeChanged(). Refactoré el código y funciona ahora.