GetLayoutParams возвращает null?

Я создал класс, который расширяет представление:

public class BoardView extends View { 

И я указал ширину и высоту BoardView в файле main.xml приложения:

  <mypackage.BoardView android:id="@+id/board" android:layout_width="270px" android:layout_height="270px" /> 

Я пытаюсь получить ширину и высоту из функции, вызываемой из конструктора BoardView. Вот что я делаю:

 ViewGroup.LayoutParams p = this.getLayoutParams(); int h = p.height; 

Но getLayoutParams всегда возвращает null. Любая идея, почему это не работает?

Я не уверен, что параметры макета (то есть экземпляр LayoutParams) будут доступны внутри конструктора View. Я думаю, он будет доступен только после того, как были сделаны «макеты». Читайте о том, как Android рисует виды здесь. Кроме того, этот поток пытается указать, когда именно вы ожидаете получить измеренные размеры представления.

Обратите внимание: если вы заинтересованы только в получении значений атрибутов, переданных через XML-макет, вы можете использовать экземпляр AttributeSet, переданный как аргумент вашему конструктору.

 public MyView(Context context, AttributeSet attrs){ // attrs.getAttributeCount(); // attrs.getAttributeXXXvalue(); } 

После добавления представления к своему родителю доступны параметры макета. Попробуйте переместить свой код из конструктора вида в onAttachedToWindow() потому что getLayoutParams() не вернет null там.

 @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); assert getLayoutParams() != null; }