2017-02-11 11 views
6

О новой версии ограничения макета, бета-5, используя match_parent бросает исключение:Как подавить ошибку ограничения макета «MATCH_PARENT не поддерживается в ConstraintLayout»

android.view.InflateException: Binary XML file line #12: MATCH_PARENT is not supported in ConstraintLayout 

Как поясняется в примечании выпуска:

«(...) его поведение не определено. Чтобы уменьшить риск ошибок, теперь мы выбрасываем исключение , если мы встретим его». - source

Они предположили, что правильное использование было бы использовать 0dp (MATCH_CONSTRAINT), но так как у меня есть макет ящика в моем макете ограничения, установив ширину 0dp броски «DrawerLayout должны быть измерены с MeasureSpec.EXACTLY " ошибка.

Так что мой вопрос: как я могу подавить ошибку «MATCH_PARENT не поддерживается в ConstraintLayout»?

+0

Вы не можете. Даже если вы нашли способ сделать это, вероятно, это не сработает. И его не обещали работать над всеми версиями библиотеки. Вы просто не должны это делать. –

ответ

1

По крайней мере, в версии 1.1.0-бета3 схемы ограничения,

Вы можете использовать match_parent без проблем.

Однако он по-прежнему рекомендуется использовать:

android:layout_width="0dp" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
+2

Стоит отметить, что производительность при использовании match_parent может быть очень высокой - у меня был макет, где я использовал match_parent для элемента в представлении пейджера, и он вряд ли работал на более медленных устройствах (например, взять секунды, чтобы прокрутить) - изменение на 0dp и ограничение для левого/правого родителя решили эту проблему – AntekM

12

Замена

android:layout_width="match_parent" 

в ConstraintLayout можно сделать с

android:layout_width="0dp" 
app:layout_constraintLeft_toLeftOf="parent" 
app:layout_constraintRight_toRightOf="parent" 

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

+1

Я уже пробовал это, но так как у меня есть DrawerLayout внутри моего ConstraintLayout, я получил ошибку «DrawerLayout должен измеряться с помощью MeasureSpec.EXACTLY», как упоминалось в моем вопросе. Я закончил использование LinearLayout. – Marcola

+0

Спасибо за отзыв, приятно знать –