1

Я создаю форму, в которой пользователь вводит свой адрес, и когда пользователь сохраняет форму, поток переходит к другому действию, в котором имя пользователя отображается ниже под Другие. Я использую TableLayout, и в каждом TableRow у меня есть TextView, который показывает имя и ImageButton рядом с текстовым представлением, которое можно использовать для удаления записи. Теперь, когда я запускаю приложение, я могу видеть только TextView в макете, ImageButton не отображается. Может кто-то, пожалуйста, помогите мне, где я ошибаюсь?ImageButton не отображается при динамическом добавлении в tablerow

Вот часть моего кода:

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 

    } 

ответ

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()); 
+0

Спасибо, за ответ, я сделал кнопку видимым, добавив строку добавлен delete_btns [I] .setLayoutParams (новые LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); Затем я увидел ваш ответ и последние 2 строки. Они не имеют никакого значения. – user2688158

+0

Если вы можете взглянуть на этот вопрос и предложить ответ ... это будет полезно. http://stackoverflow.com/questions/20754944/designing-the-tablelayout-which-has-to-be-added-dynamically-within-a-relativelay – user2688158

0

Я думаю, что ваш textview принимает все пространство в строке таблицы попробуйте установить макет Params для этого, а также

Для экс:

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

При использовании веса установить ширину 0dp как для TextView и ImageView

+0

Спасибо за ваш ответ. когда вы используете tv [i] .setLayoutParams (новые TableLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); текстовое изображение не отображается, но кнопка видна. Я сделал оба, используя TableRow.LayoutParams. – user2688158

+0

Если вы можете взглянуть на этот вопрос и предложить ответ ... это будет полезно. http://stackoverflow.com/questions/20754944/designing-the-tablelayout-which-has-to-be-added-dynamically-within-a-relativelay – user2688158

+0

проверить мои отредактированные ans –