2013-03-20 191 views
0

我有一個xml視圖,其中包含一個ScrollView(帶子LinearLayout)。將LinearLayouts添加到滾動視圖

... 
    <ScrollView 
     android:id="@+id/scrollView_container" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_marginTop="33dp" > 

     <LinearLayout 
      android:id="@+id/image_holder" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 
     </LinearLayout> 
    </ScrollView> 
... 

我試圖動態地添加一些圖片,我想3每行。

private void createDice(LinearLayout ll, Integer required) { 
    ArrayList<Integer> images = new ArrayList<Integer>(); 
    images.add(R.drawable.one); 
    images.add(R.drawable.two); 
    images.add(R.drawable.three); 
    images.add(R.drawable.four); 
    images.add(R.drawable.five); 
    images.add(R.drawable.six); 

    ScreenHelper screen = new ScreenHelper(MainActivity.this); 
    Map<String, Float> s = screen.getScreenSize(); 
    Integer maxPerRow = (int) (s.get("width")/90); // images are 89px wide 
    Log.d(TAG, "max across::"+maxPerRow); 

    Integer rows = (required/maxPerRow); 
    Log.d(TAG, "rows::"+rows); 
    for (int i=0; i < rows; i++) { 
     Log.d(TAG, "i::"+i); 
     // create linear layout for row 
     LinearLayout llAlso = new LinearLayout(this); 
     llAlso.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     //llAlso.setOrientation(LinearLayout.HORIZONTAL); 

     for (int j=0; j < 3; j++) { 
      Log.d(TAG, "j::"+j); 
      // create/add image for the row 
      ImageView iv = new ImageView(this); 
      iv.setImageResource(images.get(i)); 
      llAlso.addView(iv); 
     } 
     // add to main layout 
     ll.addView(llAlso, i); 
     Log.d(TAG, "adding to main view"); 
    } 
} 

我正在與6.
問題所需參數值測試的是,圖像的第一行被添加,但是因爲它是獲取添加鄰近任一第二不第一行(因此不在屏幕上)而不在其下面。

關於如何實現我想要的輸出的任何想法?

+0

這聽起來像你正在努力完成的非常適合'GridView',以及爲什麼你反對使用它? – 2013-03-20 16:56:29

+0

@BrentHronik我不反對使用GridView(現在我知道),但即使不是最好的方法,我仍然願意完成我開始的任務。 – Rooneyl 2013-03-20 17:05:46

回答

4

image_holder佈局中的方向設置爲vertical。默認情況下,LinearLayout的方向爲horizontal。這意味着所有的子視圖都將被添加到水平行中。由於您的孩子佈局使用寬度爲fill_parent,所以只有一個孩子可以放入該行。通過將其切換爲vertical,您的佈局將添加到垂直列中而不是連續添加。這可以讓更多佈局可見。

此外,你應該考慮使用GridLayout來代替。這是針對這種情況。

+0

謝謝,這是有效的。你能解釋一下爲什麼這麼做嗎? – Rooneyl 2013-03-20 16:56:35

+1

@Rooneyl默認情況下,「LinearLayout」的方向爲「水平」。這意味着所有的子視圖都將被添加到水平行中。由於您的子佈局在其寬度上使用'fill_parent',因此只有一個孩子可以放入該行。通過將其切換到「垂直」,您的佈局將添加到垂直列中,而不是連續添加。這可以讓更多佈局可見。 – MCeley 2013-03-20 17:05:06

+0

@MCeley感謝您的解釋 – Rooneyl 2013-03-20 17:06:23

相關問題