Распределите дочерние представления пропорционально в вертикальной линейной структуре - PullRequest
0 голосов
/ 16 февраля 2012

у меня вертикаль LinearLayout с android:layout_height = "fill_parent".

Теперь я добавляю к нему несколько дочерних представлений, иногда 2, а иногда 3, на основе определенных параметров из базы данных, динамически.

Я хотел бы знать, как программно распределить эти динамически добавленные дочерние представления по вертикали LinearLayout, чтобы они равномерно распределялись.

Кстати, я не могу использовать GridView, так как я должен встраивать это LinearLayout в горизонтальное ScrollView, а использование GridView в горизонтальном ScrollView крайне не рекомендуется.

РЕДАКТИРОВАТЬ: Добавление исходного и XML-файлов:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/serverScreensScreen1LL1"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF" >

<ScrollView
        android:id="@+id/serverScreensScreen1SV1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        >

    <HorizontalScrollView
        android:id="@+id/serverScreensScreen1HSV1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        >

        <LinearLayout
            android:orientation="horizontal"
            android:id="@+id/serverScreensScreen1LL2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

        </LinearLayout>
    </HorizontalScrollView>
</ScrollView>
</LinearLayout> <!-- Main Container -->

ИСТОЧНИК:

private void drawContent()
{
    LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(fpfp);

    LinearLayout.LayoutParams lp3 = new LinearLayout.LayoutParams(wcwc);
    lp3.weight = 0.3F;

    LinearLayout ll1 = (LinearLayout) findViewById(R.id.serverScreensScreen1LL2);

    for (int i=0; i<20; i++) 
    {
            LinearLayout ll2 = new LinearLayout(this);
            ll2.setOrientation(LinearLayout.VERTICAL);
            ll2.setLayoutParams(new         LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,     LinearLayout.LayoutParams.FILL_PARENT));
            ll2.setWeightSum(1.0F);

                LinearLayout ll3 = new LinearLayout(this);
                ll3.setOrientation(LinearLayout.VERTICAL);
                ll3.setLayoutParams(lp3);
                    TextView tv1 = new TextView(mContext);
                    tv1.setText("Sample Text A: " + i);
                    tv1.setBackgroundColor(Color.rgb(12, 34, 56 + i * 8));
                    tv1.setLayoutParams(wcwc);
                ll3.addView(tv1);


                LinearLayout ll4 = new LinearLayout(this);
                ll4.setOrientation(LinearLayout.VERTICAL);
                ll4.setLayoutParams(lp3);
                    TextView tv2 = new TextView(mContext);
                    tv2.setText("Sample Text B: " + i);
                    tv2.setBackgroundColor(Color.rgb(34, 12 + i * 8, 56));
                    tv2.setLayoutParams(wcwc);
                ll4.addView(tv2);

                LinearLayout ll5 = new LinearLayout(this);
                ll5.setOrientation(LinearLayout.VERTICAL);
                ll5.setLayoutParams(lp3);            
                    TextView tv3 = new TextView(mContext);
                    tv3.setText("Sample Text C: " + i);
                    tv3.setBackgroundColor(Color.rgb(56 + i * 8, 34, 12));
                    tv3.setLayoutParams(wcwc);
                ll5.addView(tv3);

            ll2.addView(ll3);
            ll2.addView(ll4);
            ll2.addView(ll5);

        ll1.addView(ll2);
    }
}

Любые предложения, плз ...

1 Ответ

0 голосов
/ 16 февраля 2012

Я не уверен, как вы пытаетесь распределить представления, но вы можете попробовать поиграть с весами.

Поиск android:weightSum в документах LinearLayout .

...