我对运行时生成的UI没有遵循约束有些困难。根据Android的其他答案和文档,我尝试了ConstraintSet
以及其他一些方法。对LinearLayout中的ConstraintLayout执行运行时约束
我正在扩展ConstraintLayout
,以获得在应用程序功能中具有组成部分的自定义类。我从Web服务器获取数据,然后创建这些对象并将它们添加到LinearLayout
。 LinearLayout
,ConstraintLayout
和TextView
都显示其正确的大小;然而,TextView
彼此重叠并拒绝遵守任何限制。
我可以通过布局编辑器手动创建一个我想要做的副本,它工作正常。
我的当前设置(this
延伸ConstraintLayout,text_name
和text_points
是TextView
S):
this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
this.addView(text_name);
this.addView(text_points);
ConstraintSet constraints = new ConstraintSet();
constraints.clone(this);
constraints.constrainHeight(text_points.getId(), WRAP_CONTENT);
constraints.constrainWidth(text_points.getId(), WRAP_CONTENT);
constraints.constrainHeight(text_name.getId(), WRAP_CONTENT);
constraints.constrainWidth(text_name.getId(), WRAP_CONTENT);
constraints.connect(text_name.getId(), LEFT, getId(), LEFT);
constraints.connect(text_points.getId(), RIGHT, getId(), RIGHT);
constraints.applyTo(this);
constrainWidth
和constrainHeight
工作;当我摆脱它们或改变它们的值时,它会产生效果。然而,connect
业务中的任何一个都没有做任何事情。 TextView
的文字大小合适,但不符合任何限制条件。我错过了一些使.connect
工作的线?
澄清:我有ScrollView
→LinearLayout
→ConstraintLayout
→TextView
s。在编辑器中创建时,约束可以正常工作。在运行时使用ConstraintSet
在ConstraintLayout
的实例化中创建时,连接的约束不起作用,但其他属性可以。
编辑:只是为了确认,这里加入的LinearLayout(LOCS)行#的输出,在的LinearLayout(LDIM)的大小,ConstraintLayout(LOCDIM)的大小和尺寸在TextViews(TVDIM,TV2DIM):
09-03 14:19:18.664 D/LOCS: 2
09-03 14:19:18.665 D/LDIM: 1080 w
09-03 14:19:18.665 D/LDIM: 58 h
09-03 14:19:18.665 D/LOCDIM: 1080 w
09-03 14:19:18.666 D/LOCDIM: 29 h
09-03 14:19:18.667 D/TVDIM: 165 w
09-03 14:19:18.667 D/TVDIM: 29 h
09-03 14:19:18.668 D/TV2DIM: 29 w
09-03 14:19:18.668 D/TV2DIM: 29 h
没有这个运气。是否有可能在第一次渲染后才能完成? –
我假设的这些方法用于onCreate Activity方法或onCreateView Fragment方法。我从来没有尝试过它作为视图的一部分。如果您发布布局,我可能会提供更多信息。我认为你尝试的方式更复杂。 – Juan
我正在从给定设备当前位置的Web服务器流式传输数据。之前已经完成动态加载数据!布局如前所述 - ScrollView - > LinearLayout - ConstraintLayout - TextView。加载数据时创建ConstraintLayout和TextViews。扩展ConstraintLayout自定义构造函数以传递数据。上面的代码片段来自扩展类的构造函数。 –