2013-03-15 4 views
1

Я использую TableLayout для печати девяти изображений. По какой-то причине я получаю большой разрыв между строками, как показано на рисунке ниже. Я установил фон зеленым, так что пробелы легко увидеть. My TableLayout создается программно. Как исправить эту проблему, чтобы промежуток между рядами был не таким большим?Удалите произвольный промежуток между TableRow в TableLayout

Я уже пробовал tableRowParams.setMargins(0,0,0,0).

BTW: Нет, я не хочу использовать ListView и т.д.

я возиться с кодом много пытаюсь решить эту проблему. Ниже просто текущее состояние кода:

EDIT: ПРАВИЛЬНЫЙ ОБРАЗ:

enter image description here

EDIT: код теперь будет работать нормально (спасибо @Guian):

public class FacialExpressionImagesTable extends TableLayout { 

    public FacialExpressionImagesTable(Context context, List<Bitmap> imageList, int sideDimension, int tableWidth, int tableHeight) { 
     super(context); 
     setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

     setBackgroundColor(Color.BLUE); 
     setContent(imageList, context, sideDimension); 

    } 

    private void setContent(List<Bitmap> imageList, Context context, final int sideDimension) { 
     final int iHeight = imageList.get(0).getHeight(); 
     final int iWidth = imageList.get(0).getWidth(); 
     int ndx = 0; 

     for (int r = 0; r < sideDimension; r++) { 
      TableRow tableRow = new TableRow(context); 
      TableLayout.LayoutParams forRow = new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
      tableRow.setLayoutParams(forRow); 
      tableRow.setBackgroundColor(Color.RED); 
      TableRow.LayoutParams elementLayout = new TableRow.LayoutParams(iWidth, LayoutParams.WRAP_CONTENT, 1); 
      tableRow.requestLayout(); 
      for (int c = 0; c < sideDimension; c++) { 
        ImageView element = new ImageView(context); 
        element.setLayoutParams(elementLayout); 

        element.setAdjustViewBounds(true); 
        element.setPadding(0, 0, 3, 3); 
        element.setBackgroundColor(Color.GREEN); 
        element.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
        element.setImageBitmap(imageList.get(ndx++)); 
        element.requestLayout(); 
        tableRow.addView(element); 

      } 
      addView(tableRow); 
     } 

    } 

} 
+0

, пожалуйста, укажите свой код, где вы динамически создаете свой макет таблицы. – KDeogharkar

+0

можете ли вы сделать новый снимок? –

+1

@MoshErsan Я просто потратил 50 очков (около 20% от моего общего количества тогда), чтобы получить помощь, чтобы получить правильный ответ, тогда я был достаточно хорош, чтобы опубликовать исправленный код.Поэтому, если вы собираетесь попросить новый скриншот, самое меньшее, что вы можете сделать, это дать мне 5 очков, чтобы помочь составить 50 очков :). – learner

ответ

0

сначала: помните, что вы меняете ширину и ширину Высота в:

new TableRow.LayoutParams(iHeight, iWidth); 

Но в любом случае, вы не можете дать таблицу ITESM размера растрового изображения GetHeight и GetWidth, так как они будут изменены (в зависимости от размера экрана, плотность экрана и т.д .. вам придется вычислять новый размер в соответствии с плотностью ...)

здесь, я думаю, они уменьшены. поэтому высота строки слишком велика.

Установите параметры макета, чтобы элемент принял wrap_content в высоту и 0dip с layout_weight до 1 шириной;

ТаблицаRow.LayoutParams elementLayout = new TableRow.LayoutParams (0, LayoutParams.WRAP_CONTENT, 1);

то строка таблицы взять содержание обертку как высота:

TableLayout.LayoutParams forRow = new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 

, если изображение не масштабируется по мере необходимости, вы, возможно, придется установить тип шкалы к вашему ImageViews: (с помощью setScaleType)

elementLayout.setScaleType (ScaleType.CENTER_INSIDE); // или FIT_CENTER ... не совсем уверен

Должно быть хорошо, скажите, если это не так.

надеюсь, что это поможет.

+0

Я уже много чего пробовал. Но я никогда не понимал, что перевернутый iWidth и iHeight. Я обновлю свой код, чтобы показать окончательную рабочую конфигурацию. Может быть, кто-то найдет это полезным. Благодарю. – learner

+0

, видимо, я должен ждать 21 час, чтобы наградить щедростью. – learner

1

Также попробуйте установить прокладку до 0, чтобы в каждой строке таблицы не было прокладки.

+0

@BaZinga Я добавил код. – learner

Смежные вопросы