Добавление пространства между столбцами таблицы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>
Благодарим вас за помощь.
Ответы
Ответ 1
В случае 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, сделайте это при раздувании (взято из Параметры макета загруженного представления игнорируются):
View view = inflater.inflate( R.layout.item /* resource id */,
MyView.this /* parent */,
false /*attachToRoot*/);
Альтернатива: используйте GridView, например: Android: простой GridView, отображающий текст в сетках
Ответ 2
Add Padding Right для компонента в компоненте строки таблицы
<TableRow
android:id="@+id/tableRow1">
<TextView
android:id="@+id/textView1"
android:paddingRight="20dp" />
</TableRow>
Ответ 3
Попробуйте android:layout_marginRight="6dp"
, это сработало для меня.
Ответ 4
Попробуйте использовать setColumnStretchable
функцию TableLayout
. Дайте ему индекс columnn и установите для его растяжимого свойства значение true.
Eg. Если у вас 3 столбца.
TableLayout tblLayout;
tblLayout.setColumnStretchable(0, true);
tblLayout.setColumnStretchable(1, true);
tblLayout.setColumnStretchable(2, true);
Вышеуказанное даст вам равное расстояние между всеми тремя столбцами TableLayout
.