ImageButton не отображается при динамическом добавлении в таблицу

Я создаю форму, в которой пользователь вводит свой адрес, и когда пользователь сохраняет форму, поток переходит к другому действию, где имя пользователя отображается одно под другим. Я использую 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

    }

person user2688158    schedule 24.12.2013    source источник


Ответы (2)


Я думаю, что ваш 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 - это вес представления, поскольку для него установлено значение 1f, как для просмотра изображения, так и для просмотра текста, оба будут занимать одинаковое пространство, которое вы можете изменить и установить так, как вам нужно.

При использовании веса установите ширину на 0dp как для просмотра текста, так и для просмотра изображений.

person vipul mittal    schedule 24.12.2013
comment
Спасибо за ваш ответ. когда вы используете tv[i].setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); текстовое представление не видно, но кнопка видна. Я сделал так, чтобы они отображались с помощью TableRow.LayoutParams. - person user2688158; 24.12.2013
comment
Если вы можете взглянуть на этот вопрос и предложить ответ ... это будет полезно. stackoverflow.com/questions/20754944/ - person user2688158; 24.12.2013
comment
сейчас ничего не видно - person user2688158; 24.12.2013
comment
попробуйте также установить параметры строки таблицы tr[i].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); - person vipul mittal; 24.12.2013

person    schedule
comment
Спасибо, за ответ, я сделал кнопку видимой, добавив строку, добавленную delete_btns[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); Затем я увидел ваш ответ и последние 2 строки. Они не имеют никакого значения. - person user2688158; 24.12.2013
comment
Если вы можете взглянуть на этот вопрос и предложить ответ ... это будет полезно. stackoverflow.com/questions/20754944/ - person user2688158; 24.12.2013