动态添加到tablerow时,ImageButton不可见

时间:2013-12-24 03:09:18

标签: android textview imagebutton tablerow android-tablelayout

我正在创建一个表单,用户输入他/她的地址,当用户保存表单时,流程将转到另一个活动,其中用户的名称将一个显示在另一个之下。我正在使用TableLayout并在每个TableRow中有一个TextView,它显示了文本视图旁边的名称和ImageButton,可用于删除条目。现在,当我运行应用程序时,我只能在布局中看到TextView,ImageButton是不可见的。有人可以帮助我在哪里出错?

以下是我的代码的一部分:

if (requestCode == REC_INFO && resultCode == RESULT_OK && data != null) {
        RecipientArray = (ArrayList<Person>) data
                .getSerializableExtra("RecArray");

        TableLayout tbl = new TableLayout(this);
        TextView[] tv = new TextView[RecipientArray.size()];
        ImageButton delete_btns[] = new ImageButton[RecipientArray.size()];
        TableRow tr[] = new TableRow[RecipientArray.size()];
        for (int i = 0; i < RecipientArray.size(); i++) {

            tv[i] = new TextView(this);
            tv[i].setBackgroundResource(R.drawable.fill_rece);
            Person p = RecipientArray.get(i);
            tv[i].setText(p.getName());
            tv[i].setTextColor(Color.WHITE);
            delete_btns[i] = new ImageButton(this);
            delete_btns[i]
                    .setImageResource(R.drawable.ipad_postcare_landscape_from);
            delete_btns[i].setLayoutParams(new LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            tr[i] = new TableRow(this);
            tr[i].addView(tv[i]);
            tr[i].addView(delete_btns[i]);
            tbl.addView(tr[i]);

        }
        recs_layout.addView(tbl);//I add the TableLayout to a RelativeLayout

    }

2 个答案:

答案 0 :(得分:1)

delete_btns[i] = new ImageButton(this);
delete_btns[i].setImageResource(R.drawable.ipad_postcare_landscape_from);
delete_btns[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
Drawable d = delete_btns[i].getDrawable();
d.setBounds(0, 0, delete_btns[i].getWidth(), delete_btns[i].getHeight());

答案 1 :(得分:0)

我认为您的textview占用了表格行中的所有空格,并尝试为此设置布局参数

例如:

tv[i].setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 2f));

类似于图像按钮

delete_btns[i].setLayoutParams(new TableRow.LayoutParams(
                    0, LayoutParams.WRAP_CONTENT,1f));

到表格行

tr[i].setWeightSum(3f)

此处float类型的第三个参数是视图的权重,因为对于图像视图和textview,它都设置为1f,它们将占用相等的空间,您可以更改它并将其设置为您需要。

对textview和imageview使用权重集宽度为0dp