【问题标题】:Setting constraints programmatically via constraintSet causes views to disappear通过 constraintSet 以编程方式设置约束会导致视图消失
【发布时间】:2020-07-01 01:51:55
【问题描述】:

每当我连接两个小部件时,起始元素将不再显示。 不幸的是,我不知道这个问题的原因是什么。 ConstraintLayout myLayout 已经在另一个布局中膨胀。

ConstraintLayout myLayout= getActivity().findViewById(R.id.myID);
myLayout.removeAllViews();

ConstraintSet constraintSet = new ConstraintSet();

CheckBox cb = new CheckBox(myLayout.getContext());
cb.setText("CHECKBOX");
cb.setId(View.generateViewId());

myLayout.addView(cb);

constraintSet.connect(cb.getId(),ConstraintSet.END,myLayout.getId(),ConstraintSet.END);
constraintSet.connect(cb.getId(),ConstraintSet.TOP,myLayout.getId(),ConstraintSet.TOP);

constraintSet.applyTo(myLayout);

【问题讨论】:

  • 嗨,请为每个轴设置至少 1 个约束,这里您已经定义了 END ,同时定义了 TOP 或/和 BOTTOM。
  • 我已经添加了它,但是它不能解决问题(和/或相关)。

标签: java android constraints android-constraintlayout constraintset


【解决方案1】:

设置约束后显示,像这样

    ConstraintLayout myLayout= findViewById(R.id.lo1);
    myLayout.removeAllViews();

    ConstraintSet constraintSet = new ConstraintSet();

    CheckBox cb = new CheckBox(myLayout.getContext());
    cb.setText("CHECKBOX");
    cb.setId(View.generateViewId());


    constraintSet.connect(cb.getId(),ConstraintSet.END,myLayout.getId(),ConstraintSet.END);
    constraintSet.connect(cb.getId(),ConstraintSet.TOP,myLayout.getId(),ConstraintSet.TOP);

    constraintSet.applyTo(myLayout);
    myLayout.addView(cb);

【讨论】:

    【解决方案2】:

    我没有关注您的两种布局以及它们如何交互,但通常您会添加一个视图并将其连接起来,如下所示:

    1. 创建文本视图
    2. 将视图添加到布局中
    3. 创建约束集
    4. 将布局约束(和 ID)克隆到 ConstraintSet cs.clone(layout)
    5. 建立联系
    6. ConstraintSet 应用于布局:constraintSet.applyTo(myLayout)

    此外,由于您要从 myLayout 中删除所有视图,并且不向其中添加任何内容,因此您的布局将是空的。修复这个然后上面的内容。

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多