2016-03-28 14 views
0

Mit dem folgenden Java- und XML-Code habe ich mich gefragt, wie man die Dimensionen eines inneren/untergeordneten Layouts (LinearLayout, während das Elternelement RelativeLayout mit 20pd Padding ist) richtig abbildet :Die Größe eines inneren Layouts in Pixeln ermitteln

Java-Code:

public class TestActivity extends Activity { 
    private LinearLayout linLay; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 

     linLay = (LinearLayout)findViewById(R.id.linLay); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT); 
     linLay.setLayoutParams(lp); 

     getDimensions(); 
    } 

    private void getDimensions() { 
     System.out.println(linLay.getHeight()); 
     System.out.println(linLay.getWidth()); 
    } 
} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="20dp" > 

    <LinearLayout 
     android:id="@+id/linLay" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true"> 

    </LinearLayout> 
</RelativeLayout> 

... Da ich Ausgänge von 0 für die Dimensionen, ich bin mir dessen bewusst, dass die Linearlayout zu b braucht Ich setze zuerst auf dem Bildschirm, bevor ich die Dimensionen abrufen konnte ... Aber was mache ich hier falsch?

+1

http://stackoverflow.com/questions/7474572/which-activity-method-is-called-after-all-the-layout-methods-was-made – Entreco

Antwort

1

Es wurde nicht die Abmessungen zu dem Zeitpunkt erhalten Sie versuchen, sie auszugeben.Sie können nur eine Verzögerung hinzufügen oder einfach Methode unten verwenden.

private void getDimensions() { 

    ViewTreeObserver vto = linLay.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ 
     @Override 
     public voidonGlobalLayout() { 
      linLay.getViewTreeObserver().removeGlobalOnLayoutListener(this);  
      int height =linLay.getMeasuredHeight(); 
      int width =linLay.getMeasuredWidth(); 
      System.out.println(height); 
      System.out.println(width); 
     } 
    }); 

} 
+0

Danke Sir! :) – DaveNOTDavid

+0

So stieß ich auf ein anderes Problem ... Wie würde ich die Ansicht während einer Konfigurationsänderung abfangen, wenn ein anderer Hintergrundthread (wie ein Timer) läuft? Hier ist mein Beitrag im Detail: http://stackoverflow.com/questions/36388337/runnable-and-viewtreeobserver-gether-in-one-activity – DaveNOTDavid

+0

@ dpark14 es sagte Seite nicht gefunden –