Разница между addOnGlobalLayoutListener и onWindowFocusChanged?

В настоящее время у меня есть несколько просмотров, и экран разделен на два раздела

Пример:

text1 image1 text2 text3 text4 

Проблема в том, что если image1 высок, он будет перекрывать текстовое изображение на левой стороне, поэтому я использую слева, чтобы заставить ширину текста не превышать левый вид изображения.

  android:layout_toLeftOf="@id/imageView1" 

Однако каждое текстовое изображение выравнивается влево от изображения, так как я не знаю его высоты до тех пор, пока не будет создано представление. И я хочу, чтобы все textview под базовым уровнем изображения отображали правила компоновки android:layout_toLeftOf

Итак, я искал решение и нашел два пути?

 1.onWindowFocusChanged 2.getViewTreeObserver().addOnGlobalLayoutListener 

Оба могут получить yaxis зрения.

Проблемы:

  1. what is the difference between them ? 2. I tried approach 2 , but it is not working, how to fix it? 

Код:

  image.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ImgY = image.getY(); } }); lng.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (lng.getY() > ImgY) { lng.removeRule(RelativeLayout.LEFT_OF); } } }); 

Ошибка заключается в том, что я хотел бы установить глобальное значение для хранения y изображения, но он предупреждает, что The final local variable ImgY cannot be assigned, since it is defined in an enclosing type Кроме того, функция removeRule возвращает

  The method removeRule(int) is undefined for the type TextView 

Большое спасибо за помощь.

Вы можете использовать встроенные изображения с текстами в TextView вместо этого подхода. Взгляните на это .

Intereting Posts