У меня есть выход, и я хочу изменить его ограничения в отношении телефона к планшету.
Я хочу, чтобы top_toTop был связан с viewA в устройстве телефона
app:layout_constraintTop_toTopOf="@+id/viewA"
И я хочу, чтобы это относилось к апрентам в то время как в планшетном устройстве
app:layout_constraintTop_toTopOf="parent"
Я думал использовать ссылки на ресурсы, но как я могу ссылаться на родителя? это не ресурс
Опция 1
Вместо использования parent
вы можете использовать идентификатор родительского представления (сам ConstraintLayout), таким образом, вы можете поменять только идентификатор с ресурсом, зависящим от конфигурации. Скажем, ваш макет выглядит так:
<android.support.constraint.ConstraintLayout
android:id="@+id/rootView"
...
>
<View
android:id="@+id/someView"
...
/>
<View
...
app:layout_constraintTop_toTopOf="@id/myAnchorView"/>
</android.support.constraint.ConstraintLayout>
Затем вы можете определить 2 разных идентификатора ссылки в вашей конфигурации, например, телефон:
<resources>
<item name="anchorView" type="id">@id/rootView</item>
</resources>
И планшет:
<resources>
<item name="anchorView" type="id">@id/someView</item>
</resources>
Вариант 2
Определите стиль для своего представления и имейте 2 версии этого стиля, одну для телефона:
<style name="MyView">
<item name="layout_constraintTop_toTopOf">parent</item>
</style>
и один для планшета:
<style name="MyView">
<item name="layout_constraintTop_toTopOf">@+id/viewA</item>
</style>
код у вас app:layout_constraintTop_toTopOf="parent"
правильный, но вы должны поместить его в правильную папку макета
Вы также можете создать 2-х мерные файлы с идентификаторами
Телефон
<resources>
<dimen name="view_parent">@id/viewA</dimen>
</resources>
таблетка
<resources>
<dimen name="view_parent">@id/parentId</dimen>
</resources>
расположение
app:layout_constraintTop_toTopOf="@dimen/view_parent"