2013-03-20 2 views
0

ScrollView (자식이 인 LinearLayout)이 포함 된 XML보기가 있습니다.Progammatically ScrollView에 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'에 매우 적합하다고 들리는데 왜 그 사용에 반대하는 이유입니까? –

+0

@BrentHronik GridView를 사용하는 것에 반대하지 않았습니다. (지금 알고 있습니다.) 가장 좋은 방법이 아닌 경우에도 시작한 것을 마무리하고 싶습니다. – Rooneyl

답변

4

image_holder 레이아웃의 방향을 vertical으로 설정하십시오. 기본적으로 LinearLayout의 방향은 horizontal입니다. 즉, 모든 하위 뷰가 가로 행에 추가됩니다. 귀하의 자녀 레이아웃은 너비에 fill_parent을 사용하기 때문에 하나의 자식 만 그 행에 들어갈 수 있습니다. vertical으로 전환하면 레이아웃이 행 대신 세로 열에 추가됩니다. 따라서 더 많은 레이아웃을 볼 수 있습니다.

또한 GridLayout을 사용해야합니다. 그것은이 경우에 해당합니다.

+0

감사합니다. 왜 그것이 좋을지 설명해 주시겠습니까? – Rooneyl

+1

@Rooneyl 기본적으로 'LinearLayout'의 방향은 '수평'입니다. 즉, 모든 하위 뷰가 가로 행에 추가됩니다. 여러분의 자식 레이아웃은'fill_parent'를 너비로 사용하기 때문에 하나의 자식 만이 그 행에 들어갈 수 있습니다. 'vertical'으로 바꾸면 레이아웃이 행 대신 세로 열에 추가됩니다. 따라서 더 많은 레이아웃을 볼 수 있습니다. – MCeley

+0

@MCeley는 설명을 주셔서 감사합니다. – Rooneyl

관련 문제