Intereting Posts
Тайны импортирующих библиотек (например, Picasso) в Android Studio Способ получить разблокировку в андроиде? Пакет выбора панели действий в Android для версий до 3.0 Android Toast Message не показывает Изменение цвета кнопки «Назад» в ActionBarSherlock? Android Studio: не удается запустить Git Android: включить su бинарный исполняемый файл в сборке AOSP Метод setDrawerListener устарел Как показать элементы меню переполнения в панели действий на Android Который является хорошим методом отправки 50 МБ данных в одном слоте или любым другим способом отправки 50 МБ данных json на сервер в android? Создайте «историю» для SearchView на ActionBar Широковещательный приемник для проверки подключения к Интернету в приложении Android Управление распространением событий касания в случае перекрывающихся представлений Кнопка Android TimePicker AM / PM не вызывает onTimeChanged Как получить позицию элемента, нажатого на ContextMenu?

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; }