0

私の Android アプリでは、テキストを含むいくつかの LinearLayout を動的に作成する必要があります。

しかし、各要素の重みを設定することはできません。XML部分でLLが次のようになるようにしたい:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10px"
    android:weightSum="1"
    android:id="@+id/qwe">
<TextView 
    android:layout_weight="0.1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="some"
/>
<TextView 
    android:layout_weight="0.8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="word"
/>
<TextView 
    android:layout_weight="0.1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="here"
    android:gravity="right"
/>
</LinearLayout>

良さそうに見えますが、動的に同じものが必要です。私が書いたJavaコードで:

LinearLayout ll = new LinearLayout(context);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(10, 10, 10, 10);
ll.setLayoutParams(layoutParams);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setBackgroundColor(0xFF888888);
rootLL.addView(ll);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(10, 10, 10, 10);

LinearLayout.LayoutParams params1 = params;
params1.weight = 0.15f;
TextView one = new TextView(context);
one.setLayoutParams(params1);
one.setText("some");
ll.addView(one);

LinearLayout.LayoutParams params2 = params;
params2.weight = 0.7f;
TextView two = new TextView(context);
two.setLayoutParams(params2);
two.setText("word");
ll.addView(two);

LinearLayout.LayoutParams params3 = params;
params3.weight = 0.15f;
TextView three = new TextView(context);
three.setLayoutParams(params3);
three.setText("here");
ll.addView(three);

しかし、この場合、同じ幅の 3 つの textView を取得します。メインの LL にアトリビュートを追加していないようweightSumですが、その方法がわかりません。

4

1 に答える 1

4
  1. float よりも integer を優先します。このようにして、任意の種類の分数を取得できます (1/3 であっても) 。

  2. 各ビューの重みを設定する場合、 weightSum を設定する必要はありません。

  3. if you set the weightSum , you can leave one view without any weight , giving it the rest of the space available.

  4. it seems you give all of the views the same layoutparams instead of cloning it for each of them . when you use "params2 = params;" , it means that you set a reference to it and not that you create a new one . in the end of the method , all will point to the same layoutParams , with the weight of 0.15f (since that's the last one) .

于 2012-06-01T10:43:13.300 に答える