0

ScrollView (子LinearLayoutを持つ)を含む xml ビューがあります。

...
   <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>
...

いくつかの画像を動的に追加しようとしていますが、1 行に 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 でテストしています。
問題は、画像の最初の行が追加されることですが、2 番目の画像は最初の行に隣接して (したがって画面からはみ出して) 追加され、下ではなく追加されるため、追加されません。それ。

目的の出力を達成するにはどうすればよいですか?

4

1 に答える 1

4

image_holderレイアウトの向きを に設定しますvertical。デフォルトでは、 a の向きはLinearLayoutですhorizontal。つまり、すべての子ビューが横一列に追加されます。子レイアウトはfill_parent幅を使用するため、行に収まる子は 1 つだけです。に切り替えるとvertical、レイアウトは行ではなく縦の列に追加されます。これにより、より多くのレイアウトを表示できます。

また、代わりに a を使用することを検討する必要がありGridLayoutます。それはまさにこの場合のために作られています。

于 2013-03-20T16:51:32.273 に答える