0

这是我的代码:

ConstraintLayout.LayoutParams buttonParams = new ConstraintLayout.LayoutParams(40,105);
buttonParams.setMargins(8,16,24,32);
secretCodeFields = findViewById(R.id.secretCodeFields);
for (int i = 0; i < 4; i++) {
    Button b = new Button(this);
    vID[i]=View.generateViewId();
    b.setId(vID[i]);
    b.setLayoutParams(buttonParams);

    secretCodeFields.addView(b);
}
set.clone(secretCodeFields);
set.createHorizontalChain(
    secretCodeFields.getId(),ConstraintSet.LEFT,
    secretCodeFields.getId(),ConstraintSet.RIGHT,
    vID,null,ConstraintSet.CHAIN_PACKED
    );
set.applyTo(secretCodeFields);

按钮被添加在同一个地方(所以只有最后一个是可见的)。如果我删除“b.setLayoutParams(buttonParams);”,结果相同 线和使用

secretCodeFields.addView(b,buttonParams);

所有按钮集中在一处

但是,如果我添加带有宽度和高度参数的按钮,它可以工作,但没有更多的边距:

secretCodeFields.addView(b,90,90);

链中的按钮但没有边距

我做错了什么?

编辑:secretCodeFields 是 ConstraintLayout

我找到了解决方案。我在 set.applyTo... 之后添加了边距:

for (int i = 0; i < codeLenght; i++) {
        Button b = (Button)findViewById(vID[i]);
        ConstraintLayout.LayoutParams p = (ConstraintLayout.LayoutParams) b.getLayoutParams();
        p.setMargins(6,0,6,0);
        b.setLayoutParams(p);
    }

它有效,但我不知道它是否是最好的解决方案。

4

0 回答 0