有趣的布局重量行为

时间:2018-06-12 15:56:09

标签: android android-linearlayout

我遇到了一些有趣的行为,在线性布局中设置了两个视图的权重。

我有weightSum = 1的水平线性布局。它有两个子视图leftView& rightView。我通过设置视图的权重来制作水平条形图。

如果我以权重0.05设置左视图,并以编程方式设置权重为0.95的右视图。 UI中显示的行为将显示左视图占据宽度的95%,右视图占宽度的5%。

如果我将其反转,请设置leftView 0.95&带有rightView用户界面的0.05会显示leftView占用空间的5%(我希望如此)

有没有人知道为什么会这样?

float percentage= (float)(x * 100) / y; // (2000 * 100) / 40000 = 5

LinearLayout.LayoutParams leftViewParams = 
    new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT,
        percentage/100f); // (5 / 100) = .05
leftView.setLayoutParams(leftViewParams);


LinearLayout.LayoutParams rightViewParams= 
    new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, 
        LinearLayout.LayoutParams.WRAP_CONTENT,
       (100 - percentage)/100f); //(100 - 5) / 100 = .95
rightView.setLayoutParams(rightViewParams);

但是,如果我将leftview设置为权重为.95而右视图的权重为.05,则左视图占用空间的95%,而右视图仅占5%。

有谁可以解释这里发生的事情?

BONUS XML - 如果我设置leftView layout_weight=0.05rightView layout_weight=0.95则会正确显示。

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/core_dimen_16dp"
        android:orientation="horizontal">

        <View
            android:id="@+id/leftView"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="#000" />

        <View
            android:id="@+id/rightView"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="#AAA" />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

我测试了你的代码,一切都是正确的。没有问题。我想你可能犯了一个小错误。

我注意到了您的代码,我注意到您应该将remainingWeight更改为rightViewParams <{1}}

我希望这会有所帮助。