2013-08-02 9 views
5

Zur Zeit habe ich mehrere Ansichten und der Bildschirm in zwei Bereiche eingeteiltUnterschied zwischen addOnGlobalLayoutListener und onWindowFocusChanged?

Beispiel:

text1  image1 

text2 

text3 

text4 

Das Problem ist, wenn die image1 groß ist, wird es die Textview auf der linken Seite überlappen, so dass ich nach links von, um zu erzwingen, dass die Textansichtsbreite die linke Bildansicht nicht überschreitet.

android:layout_toLeftOf="@id/imageView1" 

jedoch werden alle Textview nach links von der Imageview ausgerichtet, wie ich die Höhe der es nicht wissen, bis die Ansicht erstellt wird. Und ich möchte alle Textansicht unter der Grundlinie von Bildansicht entfernen Sie die Layout-Regeln android:layout_toLeftOf

Also suche ich nach der Lösung und finde zwei Möglichkeiten?

1.onWindowFocusChanged 

2.getViewTreeObserver().addOnGlobalLayoutListener 

Beide können die Yaxis der Ansicht erhalten.

Die Probleme sind:

1. what is the difference between them ? 

2. I tried approach 2 , but it is not working, how to fix it? 

Code:

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

Der Fehler ist ich einen globalen Wert setzen möchte den y von Imageview zu speichern, aber es warnt The final local variable ImgY cannot be assigned, since it is defined in an enclosing type Auch die removeRule Funktion zurück

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

Vielen Dank für Ihre Hilfe.

Antwort

0

Sie können Inline-Bilder mit Texten in einer TextView statt dieser Ansatz verwenden. Werfen Sie einen Blick auf this.

Verwandte Themen