1

如何以编程方式创建 ConstraintLayouts 和 Guidelines?我尝试使用以下代码创建一个简单的布局,该布局使用指南将视图锚定到屏幕中间,但它在屏幕左侧呈现红色“v”视图(见截图

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);
    }
}
4

2 回答 2

2

你用的是哪个版本的ConstraintLayout?用 beta 3 尝试你的例子,我得到了正确的行为:

在此处输入图像描述

编辑——我错了,beta 4 修复了这个问题。

此外,对于使用 ConstraintLayout 以编程方式创建布局参数,您应该在将 ConstraintLayout.LayoutParams 设置为视图之前调用 validate() 函数。

于 2016-11-03T23:43:57.617 回答
0

这是一个现在在 beta4 中修复的错误。请注意,您必须在代码中设置 ConstraintLayout.LayoutParams 后调用 lp.validate()。更多详细信息,请访问https://code.google.com/p/android/issues/detail?id=227039

于 2016-11-17T18:42:12.787 回答