2012-04-04 7 views
3

Ich versuche, Ansichten zu LinearLayout dynamisch so viel wie möglich hinzuzufügen (abhängig von der Bildschirmbreite).Berechne Ansicht messen, bevor es angezeigt wird

Ich mache dies, bevor das LinearLayout auf dem Bildschirm angezeigt wird.

Mein Linearlayout:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:background="#666"/> 

Meine Ansicht in Linearlayout anzuzeigen:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:background="#999"> 
    <ImageView 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:src="@drawable/no_photo"/> 
</FrameLayout> 

ich hinzufügen Blick auf das Layout:

int allItems = 50; 
int currentItem = 0; 
while(currentItem < allItems) 
{ 
    FrameLayout view = (FrameLayout) inflater.inflate(R.layout.fl, null); 

    linearLayout.addView(view); 

    if (linearLayout.getMeasuredWidth() >= this.getWidth()) 
    { 
     linearLayout.removeView(view); 
     break; 
    } 
} 

aber linearLayout.getMeasuredWidth(), und dies. getWidth() ist 0;

Ich weiß, dass ich die View.measure-Methode verwenden muss, um die Ansichtsgröße zu berechnen, bevor sie sichtbar wurde, aber ich weiß nicht, wo und wie sie verwendet wird.

+2

Mögliche Betrogene: http://stackoverflow.com/questions/4142090/how-do-you-to-retrieve- dimensions-of-a view-getheight-and-getwidth-immer-r/4406090 # 4406090 –

+2

überprüfen Sie diese http://StackOverflow.com/Questions/9498762/dynamic-adding-views-to-horizontal-Linearlayout-Goes- out-of-the-screen – Nishant

+0

"android: background =" # 666 "" - Ich sehe, Sie verwenden die magische Zahl genau wie ich –

Antwort

8

bearbeiten Sie den Code wie folgt:

Display display = getWindowManager().getDefaultDisplay(); 
int maxWidth = display.getWidth(); 
int widthSoFar=0; 

int allItems = 50; 
int currentItem = 0; 

while(currentItem < allItems) { 
    FrameLayout view = (FrameLayout) inflater.inflate(R.layout.fl, null); 

    linearLayout.addView(view); 

    view .measure(0, 0); 
    widthSoFar = widthSoFar + view.getMeasuredWidth(); 


    if (widthSoFar >= maxWidth) { 
    linearLayout.removeView(view); 
    break; 
    } 
} 

Hoffnung, dies hilft Ihnen

+1

Aber wenn meine Elternansicht nicht volle Bildschirmbreite nehmen? – Nik

+0

Dann können Sie die Breite der übergeordneten Ansicht innerhalb von maxWidth setzen, indem Sie parentView.getMeasureWidth() aufrufen. Welches ist deine Elternansicht hier? – Nishant

+0

Hilft Ihnen der Code? – Nishant

Verwandte Themen