При программном создании ImageButton он не добавляется в представление

Я хотел бы программно добавить 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);
}

Любые советы будут высоко ценится.


person A.Kerridge    schedule 30.10.2017    source источник


Ответы (4)


Это добавит кнопку изображения, но вы должны установить ограничения в соответствии с вашими потребностями.

вместо использования: 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);
}
person vikas kumar    schedule 30.10.2017
comment
Однако спасибо за информацию, изображение или цвет фона по-прежнему не отображаются. - person A.Kerridge; 31.10.2017
comment
ПОПРАВКА! теперь что-то появляется! это не в том месте, и мне пришлось объединить его с ответом alexscmar ниже, но мне этого достаточно для работы. Большое спасибо! - person A.Kerridge; 31.10.2017

Будьте осторожны с методом setContentView. Помимо этого, этот ответ может привести вас к вашему ответу.

person Fio    schedule 30.10.2017
comment
Спасибо за совет, но связанный вопрос тоже не работает. - person A.Kerridge; 31.10.2017

Все выглядит нормально, но вы никогда не определяете идентификатор ресурса для добавленного ImageView. В результате ваш оператор previewImg.getId() вернет "NO_ID"

Установите идентификатор для нового ImageView следующим образом:

    previewImg.setId(View.generateViewId()); // API 17+
person Cheticamp    schedule 30.10.2017

Вам необходимо установить LayoutParams вашего ImageButton:

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

previewImg.setLayoutParams(lp);

также вам может понадобиться установить поля и отступы.

person alexscmar    schedule 30.10.2017
comment
Спасибо за помощь, теперь что-то появляется! это не в том месте, и мне пришлось объединить его с ответом Викаса Кумара выше, но мне этого достаточно для работы. Большое спасибо! - person A.Kerridge; 31.10.2017