Добавление пространства между столбцами таблицыLayout

У меня есть TableLayout, где я динамически добавляю TableRows. В каждом TableRow я добавляю кнопку.

Я просто хотел бы добавить некоторое пространство между моими столбцами (которые являются моими кнопками), но я не могу понять, как … Я попытался изменить все возможные поля, но он не работает 🙁 Так что, возможно, я сделал Ошибка в моем коде, где я раздуваю их из файлов XML:

private void createButtons(final CategoryBean parentCategory) { final List<CategoryBean> categoryList = parentCategory.getCategoryList(); title.setText(parentCategory.getTitle()); // TODO à revoir int i = 0; TableRow tr = null; Set<TableRow> trList = new LinkedHashSet<TableRow>(); for (final CategoryBean category : categoryList) { TextView button = (TextView) inflater.inflate(R.layout.button_table_row_category, null); button.setText(category.getTitle()); if (i % 2 == 0) { tr = (TableRow) inflater.inflate(R.layout.table_row_category, null); tr.addView(button); } else { tr.addView(button); } trList.add(tr); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CategoryBean firstChild = category.getCategoryList() != null && !category.getCategoryList().isEmpty() ? category .getCategoryList().get(0) : null; if (firstChild != null && firstChild instanceof QuestionsBean) { Intent intent = new Intent(CategoryActivity.this, QuestionsActivity.class); intent.putExtra(MainActivity.CATEGORY, category); startActivityForResult(intent, VisiteActivity.QUESTION_LIST_RETURN_CODE); } else { Intent intent = new Intent(CategoryActivity.this, CategoryActivity.class); intent.putExtra(MainActivity.CATEGORY, category); startActivityForResult(intent, VisiteActivity.CATEGORY_RETURN_CODE); } } }); i++; } for (TableRow tableRow : trList) { categoryLaout.addView(tableRow); } } 

Моя кнопка_table_row_category.xml:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buttonTableRowCategory" style="@style/ButtonsTableRowCategory" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/validate" /> 

My table_row_category.xml:

 <?xml version="1.0" encoding="utf-8"?> <TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tableRowCategory" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="100dp" android:gravity="center" android:padding="5dp" > </TableRow> 

Спасибо за помощь.

Solutions Collecting From Web of "Добавление пространства между столбцами таблицыLayout"

В случае TableLayout самими кнопками являются столбцы. Это означает, что вам нужно советовать кнопкам удерживать пространство между ними. Вы можете сделать это, используя параметры макета. Их гораздо проще установить в XML, но он также работает программно. Важно, чтобы вы всегда использовали класс LayoutParam родительского макета элемента, в который вы его применили, – в этом случае родительский элемент – TableRow:

 // Within createButtons(): android.widget.TableRow.LayoutParams p = new android.widget.TableRow.LayoutParams(); p.rightMargin = DisplayHelper.dpToPixel(10, getContext()); // right-margin = 10dp button.setLayoutParams(p); // DisplayHelper: private static Float scale; public static int dpToPixel(int dp, Context context) { if (scale == null) scale = context.getResources().getDisplayMetrics().density; return (int) ((float) dp * scale); } 

Большинство атрибутов измерения в Android берут пиксели, если вы их программным образом устанавливаете, поэтому вы должны использовать что-то вроде моего метода dpToPixel (). Пожалуйста, не используйте значения пикселей в Android! Вы пожалеете об этом позже.

Если вы не хотите, чтобы самая правая кнопка имела этот запас, просто проверьте с помощью IF и не добавьте LayoutParam на него.


Решение в XML:

Чтобы избежать того, чтобы LayoutInflater стирал ваши XML-определенные атрибуты, делайте это при раздувании (взятые из параметров Layout загруженного представления игнорируются ):

 View view = inflater.inflate( R.layout.item /* resource id */, MyView.this /* parent */, false /*attachToRoot*/); 

Альтернатива : используйте GridView, например: Android: простой GridView, который отображает текст в сетках

Add Padding Right для компонента в компоненте строки таблицы

 <TableRow android:id="@+id/tableRow1"> <TextView android:id="@+id/textView1" android:paddingRight="20dp" /> </TableRow> 

Попробуйте использовать функцию TableLayout в TableLayout . Дайте ему индекс columnn и установите для его растяжимого свойства значение true.

Например. Если у вас 3 столбца.

 TableLayout tblLayout; tblLayout.setColumnStretchable(0, true); tblLayout.setColumnStretchable(1, true); tblLayout.setColumnStretchable(2, true); 

Вышеуказанное даст вам равное расстояние между всеми 3 столбцами tableLayout .

Попробуйте android:layout_marginRight="6dp" это сработало для меня.