约束布局布局崩溃:约束布局的所有子项应具有使用约束集的id

时间:2018-05-25 10:16:54

标签: android android-constraintlayout

更新为com.android.support.constraint:constraint-layout:1.1.0

约束布局崩溃说:

  

约束布局的所有子节点都应该使用id来使用约束   设置

我已经为所有视图设置了ID,即使它崩溃了。

java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSet at android.support.constraint.ConstraintSet.clone(ConstraintSet.java:687) at com.zoho.notebook.views.SettingsViewNavBar.showNoteSettingsView(SettingsViewNavBar.java:594) at com.zoho.notebook.views.SettingsViewNavBar.onClick(SettingsViewNavBar.java:303)

此问题仅发生在平板电脑设备上。

6 个答案:

答案 0 :(得分:20)

我的代码中有同样的错误。我有xid中所有视图的id,但是我手动将视图添加到约束布局(工具提示视图)

constraintParent.addView(childView)

虽然如果重绘约束布局(app转到bg并恢复),动态添加的视图仍在父级上,但此异常被触发。

我通过生成动态视图的视图ID来修复它,如此

CustomViewChildView childView = new CustomViewChildView()
childView.setId(View.generateViewId()); 

然后将其添加到约束布局。

答案 1 :(得分:2)

不要忘记为ConstraintLayout提供一个ID

我忘记了它,这使我的代码崩溃。从错误来看,这不是很明显。

答案 2 :(得分:1)

我一直得到这个错误,直到我意识到我没有为ConstraintLayout中的某些子元素赋予ID。因此,请确保您也不要忘记这样做。

答案 3 :(得分:0)

我只是想出如何解决此问题。请注意,您必须声明ConstrainLayout上的所有视图都具有设置的ID,请检查以下示例:

如果是第一种情况,则工作成功。

<android.support.constraint.ConstraintLayout 
    android:id="@+id/viewGroup"
    ...>
    <ImageView
        android:id="@+id/imgId"
        ... />
    <TextView
        android:id="@+id/txtId"
        ... />

如果下面的情况2无法正常工作。

<android.support.constraint.ConstraintLayout 
        android:id="@+id/viewGroup"
        ...>
        <ImageView
            android:id="@+id/imgId"
            ... />
        <TextView
          // do not set ids
            ... />

我希望这会对您有所帮助。

答案 4 :(得分:0)

就我而言 不要忘记为 contraintLayout 的所有孩子添加 ID

答案 5 :(得分:0)

当我尝试在 onGlobalLayout()(主布局完成后)添加新视图时遇到此错误。布局中的所有 id 都是正确的,设置了新的动态视图 ID(使用 setId())。但故障 "All Children of constraint layout should have ids to use constraint set" 不断发生。

当我将 View 添加到 onCreate() 时,一切都很顺利。我只需要更改关于如何放置新 View 的逻辑,因为其他视图的位置在 onCreate() 处未确定。