我想动态地将一些宽度相等的按钮添加到表格布局中。我已经尝试过StackOverflow的所有内容,但我找不到合适的解决方案。
这是我最初的XML布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/puzzle_background"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="match_parent"
android:layout_gravity="center">
<TextView
android:text="@string/levels_label"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip"
android:textSize="28sp" />
<TableLayout
android:id="@+id/displayLevels"
android:background="@color/puzzle_background"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical" >
</TableLayout>
</LinearLayout>
这是我的代码部分:
int i = 0;
int j = 0;
while (i<levelNum) {
j = i + 4;
row = new TableRow(this);
TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
row.setLayoutParams(lp);
row.setWeightSum(4);
while ((i<j)&&(i<levelNum)) {
Button iBtn = new Button(this);
iBtn.setGravity(Gravity.CENTER_HORIZONTAL);
iBtn.setText(Integer.toString(i + 1));
iBtn.setId(i + 1);
iBtn.setOnClickListener(btnclick);
row.addView(iBtn, 4 + i - j);
i++;
}
lTable.addView(row);
}
但是每次我在行中得到4个按钮并不真正适合该行。行中的右键总是在屏幕外。
我做错了什么?请指教。
最诚挚的问候,Alex
答案 0 :(得分:0)
我会以另一种方式向您提出建议,您可以通过代码了解您的屏幕:
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width1 = displaymetrics.widthPixels;
和下一步设置按钮的宽度:
iBtn.getLayoutParams().width = width1;
或者您可以通过类似功能设置按钮的最大宽度。 我希望这会有所帮助。
答案 1 :(得分:0)
首先,您的逻辑存在一些问题,two while loops
等于one while loop
。它使我困惑。
其次,android中的Button
有default minimunWidth
,所以如果setWidth
button
小于default value
,则会设置default value
的宽度}。
第三,我使用gravity.CENTER
来获取CENTER
中的所有按钮。
TableLayout displayLevels = (TableLayout)findViewById(R.id.displayLevels);
final int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp);
int i = 0;
int j = 0;
int levelNum = 8;
TableRow row = new TableRow(this);
TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
row.setLayoutParams(lp);
row.setGravity(Gravity.CENTER);
int width = (screenWidth - (levelNum)*4)/levelNum;//4: I don't remember name of it. It is default value.4dp or 4px... I don't remember exactly
displayLevels.addView(row);
while (i<levelNum) {
Button iBtn = new Button(this);
iBtn.setGravity(Gravity.CENTER_HORIZONTAL);
iBtn.setMinimumWidth(100);//I set 100px for minimunWidth.
iBtn.setWidth(width);
iBtn.setText(Integer.toString(i + 1));
iBtn.setId(i + 1);
//iBtn.setOnClickListener(btnclick);
row.addView(iBtn, i);
i++;
}
with:
private int dpToPx(int dp) {
return (int) (dp * getResources().getDisplayMetrics().density + 0.5f);
}