У меня есть ConstraintLayout.Для целей этого примера у нас может быть три вида внутри.
<android.support.constraint.ConstraintLayout ...>
<TextView
android:id="@+id/text"
.../>
<TextView
android:id="@+id/value"
.../>
<View
android:id="@+id/bar"
android:layout_width="0dp"
android:layout_height="8dp"
android:background="@color/bar_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/text"
app:layout_constraintEnd_toStartOf="@id/value"
/>
</android.support.constraint.ConstraintLayout>
Во время выполнения я хочу установить ширину bar
равной некоторому значению между расстоянием между text
и value
.
У меня уже есть значение от 0 до 100, которое представляет собой процент от расстояния между двумя текстовыми представлениями.
До сих пор я пробовал два метода, но застрял.
Попытка 1
Чтобы сделать это, я чувствую, что мне нужно фактическое расстояние между text
и value
и метод для правильной установки ширины полосы.
Я могу установить ширину bar
, выполнив следующие действия:
val params: ConstraintLayout.LayoutParams = percentageBar.layoutParams as LayoutParams
params.matchConstraintMaxWidth = 300 // should be actual value rather than 300
percentageBar.layoutParams = params
Это точно устанавливает ширину полосы.Но мне нужен какой-то способ выяснить, каким должно быть действительное число, а не 300. Что-то вроде (процентное значение * text-value-distance / 100).
Попытка 2
Из других ответов по SO я узнал об процентном ограничении.
...
<View
android:id="@+id/bar"
android:layout_width="0dp"
android:layout_height="8dp"
android:background="@color/bar_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/value"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@id/text"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="1.0"/>
...
Затем в коде я могу просто сделать params.matchConstraintPercentWidth = item.percentageOfMaxValue.toFloat()
Проблема сэто то, что, когда значение процента установлено высоким, оно берет процент от родительского и проходит после начала value
.
Я двигаюсь в правильном направлении?
Я надеюсьЯ достаточно ясно описал проблему.
Заранее спасибо.
// Обновление
Я выдвинул упрощенную версию с тем, что напоминаетпроблема у меня BarProblem на GitHub
Вы можете увидеть проблему на вкладке дизайна редактора макетов.
// Обновление 2
Проблема решена.GitHub repo теперь содержит код для решения.