以编程方式创建ImageButton时,它不会添加到视图中

时间:2017-10-30 15:45:42

标签: java android android-layout android-constraintlayout

我想以编程方式将ImageButton添加到特定的约束布局。一个也受限于特定指导方针。到目前为止,我已经实现了下面的方法并且它没有给出任何错误,但是,除了debugText之外,似乎没有任何错误发生。

public void addButtonImage () {

    setContentView(R.layout.activity_homepage); // - Moved out of method
    ConstraintLayout conL = (ConstraintLayout)findViewById(R.id.newLayout);
    ImageButton previewImg = new ImageButton(this);
    Guideline leftGl = (Guideline)findViewById(R.id.leftGideLine);
    Guideline rightGL = (Guideline)findViewById(R.id.rightGuideLine);
    ImageView header = (ImageView) findViewById(R.id.Header);

    previewImg.setImageBitmap(displayImage); // displayImage variable assigned out of method
    previewImg.setBackgroundColor(Color.parseColor("#FFFF00"));
    conL.addView(previewImg);

    ConstraintSet conS = new ConstraintSet();
    conS.clone(conL);

    conS.constrainHeight(pp.getId(), 90);
    conS.constrainWidth(pp.getId(), 0);
    conS.connect(previewImg.getId(), ConstraintSet.TOP, header.getId(), ConstraintSet.BOTTOM);
    conS.connect(previewImg.getId(), ConstraintSet.LEFT, leftGl.getId(), ConstraintSet.RIGHT);
    conS.connect(previewImg.getId(), ConstraintSet.RIGHT, rightGL.getId(), ConstraintSet.LEFT);
    conS.applyTo(conL);
}

非常感谢任何建议。

4 个答案:

答案 0 :(得分:0)

小心你的setContentView方法。除了this回答之外,您可以找到答案。

答案 1 :(得分:0)

一切看起来都不错,但您永远不会为添加的ImageView定义资源ID。因此,您的陈述previewImg.getId()将返回" NO_ID"

为新ImageView设置ID,如下所示:

    previewImg.setId(View.generateViewId()); // API 17+

答案 2 :(得分:0)

这将添加图像按钮,但您必须设置约束以满足您的需求。

而不是使用:previewImg.setImageBitmap(displayImage);

使用此:previewImg.setImageResource(R.mipmap.ic_launcher);

public void addButtonImage () {
    ConstraintLayout conL = (ConstraintLayout)findViewById(R.id.newLayout);
    ImageButton previewImg = new ImageButton(this);
    Guideline leftGl = (Guideline)findViewById(R.id.leftGideLine);
    Guideline rightGL = (Guideline)findViewById(R.id.rightGuideLine);
    ImageView header = (ImageView) findViewById(R.id.Header);

    previewImg.setImageResource(R.mipmap.ic_launcher); // displayImage variable assigned out of method
    previewImg.setBackgroundColor(Color.parseColor("#FFFF00"));
    conL.addView(previewImg);

    ConstraintSet conS = new ConstraintSet();
    conS.clone(conL);

    conS.constrainHeight(pp.getId(), 90);
    conS.constrainWidth(pp.getId(), 0);
    conS.connect(previewImg.getId(), ConstraintSet.TOP, header.getId(), ConstraintSet.BOTTOM);
    conS.connect(previewImg.getId(), ConstraintSet.LEFT, leftGl.getId(), ConstraintSet.RIGHT);
    conS.connect(previewImg.getId(), ConstraintSet.RIGHT, rightGL.getId(), ConstraintSet.LEFT);
    conS.applyTo(conL);
}

答案 3 :(得分:0)

需要设置ImageButton的LayoutParams

ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

previewImg.setLayoutParams(lp);

您也可能需要设置边距和填充。