harmjanr
harmjanr

Reputation: 937

Dynamically add ImageView to TableRow

I have a TableLayout in my XML, and I'd like to dynamically add a TableRow with an ImageView to that TableLayout. What I have so far is this:

TableRow tr = new TableRow(this);
ImageView imgView = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                            LayoutParams.WRAP_CONTENT,
                            LayoutParams.WRAP_CONTENT);
imgView.setLayoutParams(lp);
imgView.setImageDrawable(getResources().getDrawable(R.drawable.icon_test));
tr.addView(imgView);
tlCollection.addView(tr);

What am I doing wrong? If I want to add a Textview to the same TableRow, it works, but adding an ImageView doesn't work..

The code for adding a TextView:

TextView myTextView = new TextView(this);

myTextView.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,TableRow.LayoutParams.WRAP_CONTENT));
myTextView.setText("Test");
tr.addView(myTextView);

Any idea?

Upvotes: 2

Views: 5193

Answers (4)

RajaSekar
RajaSekar

Reputation: 398

I Had the same problem now its fixed using the below code

CandFlag =new ImageView(this);
CandFlag.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                    TableRow.LayoutParams.WRAP_CONTENT));

CandFlag.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.flag));


LayoutParams layoutParams = (LayoutParams) CandFlag.getLayoutParams();
            layoutParams.width = 75;
            layoutParams.height = 75;
            CandFlag.setLayoutParams(layoutParams);

Tablerow.addView(CandFlag);

Upvotes: 0

Thilina Anuradh
Thilina Anuradh

Reputation: 211

try this

ImageView imgView = new ImageView(this); imgView.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));

tr.addView(imgView);

Upvotes: 0

harmjanr
harmjanr

Reputation: 937

I fixed it, using an LayoutInflater:

LayoutInflater inflater = getLayoutInflater();

TableRow row = (TableRow)inflater.inflate(R.layout.collection_row, tlCollection, false);

//fill textview
TextView content = (TextView)row.findViewById(R.id.txtCollection);
content.setText("Test");

//fill imageview
ImageView myImgView = ImageView)row.findViewById(R.id.imgCollection);           
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.my_icon));

//add row to tablelayout
tlCollection.addView(row);

Upvotes: 1

Rich
Rich

Reputation: 36836

I think it has to do with the layout params. You're setting both dimensions to WRAP_CONTENT but the image view doesn't have "content" per se, it has a source drawable. Try playing around with adjustViewBounds, setScaleType, and the layout params. Notice that in your example of being able to add a TextView, you're setting the width to FILL_PARENT?

The only example I can find quickly in my open projects of adding an ImageView dynamically in this way was a case in which I was using FILL_PARENT in both directions. That might not work for you since I'm not doing it exactly the same, but it's worth playing around with these settings as well as the two others mentioned above.

Upvotes: 0

Related Questions