GetLayoutParams devolver nulo?
He creado una clase que extiende una vista:
public class BoardView extends View {
Y he especificado el ancho y la altura de la BoardView en el archivo main.xml de la aplicación:
<mypackage.BoardView android:id="@+id/board" android:layout_width="270px" android:layout_height="270px" />
Estoy tratando de obtener el ancho y la altura de una función que se llama desde el constructor de BoardView. Esto es lo que estoy haciendo:
ViewGroup.LayoutParams p = this.getLayoutParams(); int h = p.height;
Pero getLayoutParams siempre está devolviendo null. ¿Alguna idea de por qué esto no funciona?
No estoy seguro de que los parámetros de diseño (por ejemplo, instancia de LayoutParams) estarán disponibles dentro del constructor de la vista. Creo que sólo estará disponible después de que se hayan hecho los pases de "layout". Lea cómo Android dibuja las vistas aquí. Además, este hilo trata de señalar el punto cuando exactamente se debe esperar para obtener las dimensiones medidas de una vista.
Tenga en cuenta que si está interesado en obtener los valores de atributo pasados a través de XML de presentación, puede utilizar la instancia de AttributeSet pasada como argumento a su constructor.
public MyView(Context context, AttributeSet attrs){ // attrs.getAttributeCount(); // attrs.getAttributeXXXvalue(); }
Una vez que la vista se agrega a su padre, los parámetros de diseño están disponibles. Intente mover su código desde el constructor de vista a onAttachedToWindow()
porque getLayoutParams()
no devolverá null
allí.
@Override protected void onAttachedToWindow() { super.onAttachedToWindow(); assert getLayoutParams() != null; }