1

アダプターからデータを取得し、それを行ごとに並べて配布するビューを作成しようとしています。ビューは、次の行にいつ要素を配置するかを決定するために、その幅に依存する必要があります。私が達成しようとしていることのイラストを見てください。

http://i43.tinypic.com/2w327bq.png

ここで素晴らしいコードをいくつか見つけました: Android - 複数行の線形レイアウト 動的に線形レイアウトを生成します (垂直レイアウトの中に水平レイアウトを配置します)。ただし、このすべてのデータを 1 つのビューに保持し、その上にアダプターを設定したいと考えています。これを達成する方法についての提案に感謝します。

引用されたスレッドからのコード スニペット:

/**
 * Copyright 2011 Sherif 
 * Updated by Karim Varela to handle LinearLayouts with other views on either side.
 * @param linearLayout
 * @param views : The views to wrap within LinearLayout
 * @param context
 * @param extraView : An extra view that may be to the right or left of your LinearLayout.
 * @author Karim Varela
 **/
private void populateViews(LinearLayout linearLayout, View[] views, Context context, View extraView)
{
 extraView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

// kv : May need to replace 'getSherlockActivity()' with 'this' or 'getActivity()'
Display display = getSherlockActivity().getWindowManager().getDefaultDisplay();
linearLayout.removeAllViews();
int maxWidth = display.getWidth() - extraView.getMeasuredWidth() - 20;

linearLayout.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams params;
LinearLayout newLL = new LinearLayout(context);
newLL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
newLL.setGravity(Gravity.LEFT);
newLL.setOrientation(LinearLayout.HORIZONTAL);

int widthSoFar = 0;

for (int i = 0; i < views.length; i++)
{
    LinearLayout LL = new LinearLayout(context);
    LL.setOrientation(LinearLayout.HORIZONTAL);
    LL.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
    LL.setLayoutParams(new ListView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    views[i].measure(0, 0);
    params = new LinearLayout.LayoutParams(views[i].getMeasuredWidth(), LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 0, 5, 0);

    LL.addView(views[i], params);
    LL.measure(0, 0);
    widthSoFar += views[i].getMeasuredWidth();
    if (widthSoFar >= maxWidth)
    {
        linearLayout.addView(newLL);

        newLL = new LinearLayout(context);
        newLL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        newLL.setOrientation(LinearLayout.HORIZONTAL);
        newLL.setGravity(Gravity.LEFT);
        params = new LinearLayout.LayoutParams(LL.getMeasuredWidth(), LL.getMeasuredHeight());
        newLL.addView(LL, params);
        widthSoFar = LL.getMeasuredWidth();
    }
    else
    {
        newLL.addView(LL);
    }
}
linearLayout.addView(newLL);
}
4

0 に答える 0