Я столкнулся с некоторым интересным поведением, устанавливающим вес двух представлений в линейном макете.
У меня горизонтальная линейная компоновка с 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>