我的XML中有一个TableLayout,我想动态地将带有ImageView的TableRow添加到该TableLayout。到目前为止我所拥有的是:
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);
我做错了什么?如果我想将Textview添加到同一个TableRow,它可以工作,但添加ImageView不起作用..
添加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);
有什么想法吗?
答案 0 :(得分:1)
我使用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);
答案 1 :(得分:0)
我认为这与布局参数有关。您将两个维度都设置为WRAP_CONTENT,但图像视图本身没有“内容”,它有一个源可绘制的。尝试使用adjustViewBounds,setScaleType和布局参数。请注意,在您能够添加TextView的示例中,您将宽度设置为FILL_PARENT?
我在这个以这种方式动态添加ImageView的开放项目中可以快速找到的唯一例子就是我在两个方向上都使用FILL_PARENT的情况。这可能不适合你,因为我没有完全相同,但值得玩这些设置以及上面提到的其他两个。
答案 2 :(得分:0)
试试这个
ImageView imgView = new ImageView(this); imgView.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));
tr.addView(imgView);
答案 3 :(得分:0)
我现在使用以下代码修复了同样的问题
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);