Интересное поведение веса макета - PullRequest
0 голосов
/ 12 июня 2018

Я столкнулся с некоторым интересным поведением, устанавливающим вес двух представлений в линейном макете.

У меня горизонтальная линейная компоновка с weightSum = 1.Он имеет два детских вида, leftView & rightView.Я делаю горизонтальную гистограмму, устанавливая вес просмотров.

Если программно установить левый вид с весом 0.05 и правый вид с весом 0.95.Поведение, представленное в пользовательском интерфейсе, будет отображать левый вид с 95% ширины и правый вид 5% ширины.

Если я переверну его, установив leftView с 0.95 и rightView с 0.05, пользовательский интерфейс представит leftView, занимающий 5% пространства (так, как я хочуbe)

Кто-нибудь знает, почему это происходит?

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);

Однако, если я установлю для левого обзора вес 0,95, а для правого - вес.05 левый вид занимает 95% пространства, а правый - только 5%.

Может кто-нибудь объяснить, что здесь происходит?

БОНУС XML - если я установлю leftView layout_weight=0.05 и rightView 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 голосов
/ 12 июня 2018

Я проверил ваш код и все правильно.Нет проблем.Я думаю, что, вероятно, вы допустили небольшую ошибку.

Я обратил внимание на ваш код и заметил, что вы должны изменить remainingWeight на rightViewParams в строке: rightView.setLayoutParams(remainingWeight);

Iнадеюсь, это поможет.

...