我對運行時生成的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自定義構造函數以傳遞數據。上面的代碼片段來自擴展類的構造函數。 –