Android – процент ConstraintLayout с использованием размеров

Возник вопрос Как заставить ConstraintLayout работать с процентными значениями? и его ответы показывают, как использовать проценты:

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="1dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.5"/>

Но если вы не хотите жестко кодировать процент, но используете ресурс размера, это не сработает.

<!-- inside the layout -->

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="1dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="@dimen/guideline_perc"/>

<!-- inside dimens.xml -->

<dimen name="guideline_perc>0.5</dimen>

Вы получаете следующую ошибку:

Float types not allowed (at 'guideline_perc' with value 0.5).

Если вы замените значение на 1, будет возвращена аналогичная ошибка:

Integer types not allowed (at 'guideline_perc' with value 1).

Как вы устанавливаете процент без жесткого кодирования значения в макете?


person neits    schedule 11.04.2017    source источник


Ответы (3)


Вместо использования ресурса dimen используйте ресурс элемента типа dimen:

<item name="guideline_perc" type="dimen">0.5</item>

При использовании целых чисел лучше всего подойдет ресурс integer:

<integer name="guideline_perc">1</integer>

person neits    schedule 11.04.2017
comment
Если это работает, то это либо ошибка IDE, либо ошибка инструментов сборки, поскольку оба подхода приводят к ресурсу измерения. - person CommonsWare; 11.04.2017
comment
Для определения ресурса как измерения требуется единица измерения. Определение его как элемента с типом dimen не работает. Дополнительно можно добавить формат float, но это не обязательно. - person neits; 11.04.2017
comment
Ах я вижу. Тогда попробуйте использовать ресурс float или integer, а не dimen. - person CommonsWare; 11.04.2017
comment
Использование integer было бы лучшим решением, это правда, но в этом примере я использовал число с плавающей запятой, а ресурса float на самом деле нет. - person neits; 11.04.2017
comment
Хммм... Я мог бы поклясться, что было float ресурсов, хотя сейчас я не вижу их в документах... - person CommonsWare; 11.04.2017
comment
Вы думаете о fraction? Например, <fraction name="guideline_perc">0.67</fraction>. Используется как app:layout_constraintGuide_percent="@fraction/guideline_perc" - person AutonomousApps; 28.12.2017
comment
Нвм, это не работает. AS не жалуется, макет даже в превью выглядит правильно, но не компилируется. Нужно использовать это: <item name="guideline_perc" type="dimen" format="float">0.67</item> - person AutonomousApps; 28.12.2017
comment
как я могу ссылаться на это? - person DaniloDeQueiroz; 31.08.2018

Чтобы установить процент, используйте синтаксис дроби

<fraction name="guideline_perc">0.5</fraction>

а потом

app:layout_constraintGuide_percent="@fraction/guideline_perc"
person Catalin Morosan    schedule 20.11.2018
comment
Небольшое замечание: как ни странно, редактор XML НЕ предлагает typeAhead. Красный свет гаснет только тогда, когда вы правильно пишете название ресурса полностью. - person Bad Loser; 09.12.2019

Теперь в 2021 году размерный поплавок работает нормально. Просто автозаполнение в студии Android в этом случае не работает. Не знаю почему.

app:layout_constraintGuide_percent="@dimen/guideline_perc"

person Vít Kapitola    schedule 02.06.2021