Слушатели Global Layout возвращают 0 - PullRequest
0 голосов
/ 05 февраля 2020

Здравствуйте. Я хочу получить относительную высоту и ширину макета с помощью прослушивателя глобального макета:

final RelativeLayout relativeLayout = binding.rl;

      relativeLayout.getViewTreeObserver()
              .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
           @Override
           public void onGlobalLayout() {
               // TODO Auto-generated method stub

                   width = relativeLayout.getWidth();
                   height = relativeLayout.getHeight();
                   relativeLayout.getViewTreeObserver()
                           .removeOnGlobalLayoutListener(this);

           }
       });

проблема с моим кодом - ширина и высота приближаются к нулю. Может кто-нибудь сказать мне любое решение для того же. Заранее спасибо.

   <RelativeLayout
                                android:id="@+id/rl"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                               android:layout_marginTop="@dimen/dp12">

  <androidx.recyclerview.widget.RecyclerView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
                                    />
    </RelativeLayout>

1 Ответ

0 голосов
/ 05 февраля 2020

Если у вас нет другого выбора, попробуйте использовать getMeasuredWidth () или getMeasuredHeight ():

relativeLayout.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int width = relativeLayout.getMeasuredWidth();
int height = relativeLayout.getMeasuredHeight();

Но в зависимости от вашей проблемы попробуйте удалитьOnGlobalLayoutListener только тогда, когда высота или вес больше 0, потому что если ширина вашего макета / height это "wrap_content", это может быть действительно 0:

    relativeLayout.getViewTreeObserver()
            .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    // TODO Auto-generated method stub

                    width = relativeLayout.getWidth();
                    height = relativeLayout.getHeight();

                    if (width > 0) {
                        relativeLayout.getViewTreeObserver()
                                .removeOnGlobalLayoutListener(this);
                    }
                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...