私は動的にTableRowsを追加するTableLayoutを持っています。各TableRowに、ボタンを1つ追加します。
列(ボタン)の間にスペースを追加したいのですが、方法がわかりません...可能なマージンをすべて変更しようとしましたが、機能しません:( 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);
}
}
私のbutton_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" />
私の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>
ご協力ありがとうございました。
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*/);
Alternative:次のようにGridViewを使用します: Android:グリッドにテキストを表示するシンプルなGridView
テーブル行コンポーネントのコンポーネントにパディング権限を追加します
<TableRow
Android:id="@+id/tableRow1">
<TextView
Android:id="@+id/textView1"
Android:paddingRight="20dp" />
</TableRow>
Android:layout_marginRight="6dp"
をお試しください。これでうまくいきました。
setColumnStretchable
のTableLayout
関数を使用してみてください。 columnnインデックスを指定し、stretchableプロパティをtrueに設定します。
例えば。 3つの列がある場合。
TableLayout tblLayout;
tblLayout.setColumnStretchable(0, true);
tblLayout.setColumnStretchable(1, true);
tblLayout.setColumnStretchable(2, true);
上記は、tableLayout
の3つの列すべての間に等間隔を与えます。