我想为ConstraintLayout
的内部元素设置一般样式。例如,我有多个具有以下属性的TextView
:
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
我为此创建了这种样式:
<style name="PageTitleStyle">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginRight">8dp</item>
<item name="android:layout_marginLeft">8dp</item>
</style>
但是如何将这些属性设置为已定义的样式?
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
答案 0 :(得分:0)
不能在“样式”中使用关系约束。尝试在布局中使用
答案 1 :(得分:0)
您可以按照以下方式定义属性:
<style name="MyStyle">
<item name="layout_constraintLeft_toLeftOf">parent</item>
<item name="layout_constraintRight_toRightOf">parent</item>
</style>
然后您可以在每个style="@style/MyStyle"
上指定TextView
。
在ConstraintLayout
上设置样式不会在ConstraintLayout
的子级上设置样式,除非您将样式设置为主题。参见"Apply a style as a theme"。 (强调是我的。)
从Android 5.0(API级别21)和Android支持库v22.1开始,您还可以为布局文件中的视图指定android:theme属性。这会修改该视图和所有子视图的主题,这对于在界面的特定部分更改主题调色板很有用。
因此,您可以将android:theme="@style/MyStyle"
添加到ConstraintLayout
中。这将替换现有主题,因此您可能需要将AppTheme
设置为MyStyle
的父级。
在执行此操作时,我注意到了一个奇怪的副作用:样式中命名的约束会(正确)影响工作室设计师中布局的显示,但约束本身不会显示。布局编辑器也不会选择在样式中定义了约束,并且会给出“约束丢失”错误。 (Android Studio 3.3 RC3)