在我的Android应用中,我需要动态创建一些带有文本的LinearLayout。
但是我不能设置每个元素的权重。我希望LL在XML部分中看起来像:
<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);
但是在这种情况下,我获得了三个等宽的textView。看来我没有为主LL添加
weightSum
属性,但我不知道该怎么做。 最佳答案
首选整数而不是浮点数。这样,您可以得到任意分数(甚至1/3)。
如果您设置每个视图的权重,则无需设置weightSum。
如果设置weightSum,则可以不加任何权重地保留一个视图,从而为其提供剩余的可用空间。
似乎您给所有视图相同的layoutparams,而不是为每个视图克隆它。当您使用“ params2 = params;”时,则意味着您设置了对它的引用,而不是创建一个新的引用。在该方法的最后,所有都将指向相同的layoutParams,权重为0.15f(因为这是最后一个)。