Получить высоту скрытого динамического просмотра - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два вида, один под другим. firstView отображается, secondView скрыто. При нажатии на кнопку один рухнет, а второй расширится. Проблема заключается в динамической сборке secondView: она рассчитывает высоту в onMeasure ( облако тегов , оборачивает теги в новые строки, в результате высота представления изменяется).

Таким образом, я могу получить высоту представления контейнера облака тегов в виде однострочных дочерних представлений без вычисления высоты, используя приведенный ниже код. Но как я могу получить реальную высоту secondView, прежде чем она будет показана?

view.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int height = view.getMeasuredHeight();

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Обходной путь следующий:

  • Оберните view, который должен быть расширен до RelativeLayout
  • Установите view видимым, но скрытым, убрав его за пределы экрана: установите layout_marginTop="-1000dp"
  • Тогда вы можете получить реальную высоту view в коде (см. Ниже), подождав, пока он не станет видимым

Отрывок:

    view.post(new Runnable() {
                @Override
                public void run() {
                    viewHeight = view.getHeight(); // getting real height, use further for animation
                    view.setVisibility(View.GONE);
                    clearLayoutMargins(view); // clear margins here
                }
            });
0 голосов
/ 28 августа 2018

Вы можете использовать ViewTreeObserver, чтобы дождаться, когда представление будет разложено, а затем получить высоту и ширину.

int height;
int width
secondView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            height = secondView.getHeight();
            width = secondView.getWidth();
            secondView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });
...