2016-11-03 76 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