2013-08-02 2 views
5

В настоящее время я несколько представлений, и экран разделен на две секцииРазница между addOnGlobalLayoutListener и onWindowFocusChanged?

Пример:

text1  image1 

text2 

text3 

text4 

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

android:layout_toLeftOf="@id/imageView1" 

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

Итак, я ищу решение и нахожу два пути?

1.onWindowFocusChanged 

2.getViewTreeObserver().addOnGlobalLayoutListener 

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

Проблемы:

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

ошибка, я хотел бы задать глобальное значение для сохранения у из ImageView, но предупреждает 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 

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

ответ

0

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