ConstraintLayout的子代样式

时间:2019-01-14 07:52:52

标签: android android-layout android-styles android-constraintlayout

我想为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"

2 个答案:

答案 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)