getLayoutParams возвращает ноль? - PullRequest
10 голосов
/ 14 января 2010

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

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 всегда возвращает ноль. Есть идеи, почему это не работает?

Ответы [ 2 ]

16 голосов
/ 11 марта 2015

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

@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    assert getLayoutParams() != null;
}
13 голосов
/ 14 января 2010

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

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

public MyView(Context context, AttributeSet attrs){
// attrs.getAttributeCount();
// attrs.getAttributeXXXvalue();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...