2016-11-03 72 views
0

如何以編程方式創建ConstraintLayouts和指南?我已經嘗試了下面的代碼來創建一個簡單的佈局,使用Guideline將視圖錨定到屏幕中間,但它呈現屏幕左側的紅色'v'視圖(請參閱screenshot在代碼中創建Android ConstraintLayout和指南

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ConstraintLayout cl = new ConstraintLayout(this); 
     cl.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
     setContentView(cl); 

     Guideline gl = new Guideline(this); 
     ConstraintLayout.LayoutParams gllp = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 500); 
     gllp.guidePercent = 0.5f; 
     gllp.orientation = LinearLayout.VERTICAL; 
     gl.setLayoutParams(gllp); 
     gl.setId(View.generateViewId()); 
     cl.addView(gl); 

     View v = new View(this); 
     v.setId(View.generateViewId()); 
     v.setBackgroundColor(0xFFFF0000); 
     ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(50, 500); 
     lp.rightToRight = gl.getId(); 
     v.setLayoutParams(lp); 
     cl.addView(v); 
    } 
} 

回答

0

您正在使用哪個版本的ConstraintLayout?試圖用的Beta 3你的榜樣,我得到了正確的行爲:

enter image description here

編輯 - 我是不正確的,並測試4對這個問題的修補程序。

另外,對於使用ConstraintLayout以編程方式創建佈局參數,您應該在將ConstraintLayout.LayoutParams設置爲視圖之前調用validate()函數。

+0

我也在使用beta3。這很奇怪。安裝時,我確實在https://code.google.com/p/android/issues/detail?id=227030上發生了錯誤,但即使出現錯誤,安裝也會成功。我檢查了實際的約束 - 佈局-1.0.0-beta3.aar文件的md5,它具有我認爲正確的md5(0b98641b30b62b65adbeba29d90d1107),所以它似乎確實是beta3。 – snoob

+0

我只是讓我的同事安裝約束佈局(成功沒有錯誤),並嘗試這一點,他得到了我所做的同樣的破壞行爲。使用beta3。 – snoob

+0

我使用beta1獲得了正確的行爲。所以看起來這是beta2中的迴歸。我已經在我的機器和我的同事的機器上證實了這一點。使用android 5在nexus 6上進行測試,並在模擬器上使用android 5,6和7進行測試(所有行爲都相同)。 – snoob