Получить фактическую высоту обзора - PullRequest
4 голосов
/ 21 декабря 2010

Простой вопрос, возможно, сложный, но, надеюсь, простой ответ?

Что такое «наилучшая практика» для получения фактической высоты элемента, размер которого установлен в FILL_PARENT?

Ответы [ 2 ]

17 голосов
/ 21 декабря 2010

Определенно сложнее, чем кажется.По сравнению с ответом на предложенный вопрос я нашел более простой способ - использовать ViewTreeObserver.В вашем методе onCreate () вы можете использовать некоторый код, такой как следующий:

TextView textView = (TextView)findViewById(R.id.my_textview);
ViewTreeObserver observer = textView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        //in here, place the code that requires you to know the dimensions.
        //this will be called as the layout is finished, prior to displaying.
    }
}
2 голосов
/ 24 сентября 2014

Просто дополнительная поправка к ответу выше, если вам нужно выполнить какие-либо операции с измерениями нескольких компонентов в представлении. Слушатель макета вызывается для каждого представления по завершении его макета. Это рекурсивно верно для корневого компонента представления (то есть дочерние элементы генерируют события макета, затем родительский элемент генерирует событие макета). Это означает, что вы можете просто подключиться к событию макета компонента корневого представления, чтобы получать уведомления при изменении макета любого представления.

ViewTreeObserver observer = this.findViewById(android.R.id.content).getViewTreeObserver();

Теперь вы можете ожидать, что все ваши виды будут иметь значения ширины и высоты, установленные в onGlobalLayout, потому что все они выполнили свой макет. Очевидно, что это предпочтительнее, чем создавать много слушателей для каждого представления, которое должно отображать его фактические размеры (если, конечно, вам абсолютно не обязательно иметь область, для которой представление генерировало событие, что обычно не требуется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...