我需要更改Android应用中按钮的大小(特别是高度),其中按钮位于表格中并以编程方式创建。我已经尝试了大约20种不同的方法并且悲惨地失败了。如果我在桌子外面创建一个按钮,我可以毫无问题地改变尺寸,但是一旦进入桌子,即使我可以改变宽度,高度也会保持固定。
我尝试过创建和使用LinearLayout参数,ViewGroup布局参数,TableLayout参数等,并通过该构造函数(例如WRAP_CONTENT)或使用setHeight()设置它们的高度。我也尝试过调用button.setHeight()。我也更改了表格的xml清单中的设置。我使用了像素值和Dpi值。所有这一切都失败了。这是我到目前为止的基础知识(只是显示对b.setHeight()的调用):
TableRow row = new TableRow(getApplicationContext());
row.setId(counter);
TextView t = new TextView(getApplicationContext());
t.setText("BLH " + counter);
t.setTextColor(Color.BLACK);
//I have also tried table.getContext() in this constructor...
Button b = new Button(getApplicationContext());
b.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
//blah blah blah
});
//Convert from pixels to Dpi
final float scale = getResources().getDisplayMetrics().density;
int heightDp = (int) (33 * scale + 0.5f);
int widthDp = (int) (60 * scale + 0.5f);
b.setText(R.string.removeButtonText);
b.setTextSize(12);
b.setTag(counter);
b.setHeight(heightDp);
b.setWidth(widthDp);
b.setId(counter);
counter++;
row.addView(t);
row.addView(b);
// add the TableRow to the TableLayout
table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
这正确导致按钮被放置在表格中,但无论我使用什么值,高度都不会改变。在我的xml文件中,这是表声明的样子:
<TableLayout
android:id="@+id/myTable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:stretchColumns="0">
</TableLayout>
我在这里尝试过使用stretchColumns和其他设置;再次,无济于事。有没有人知道为什么我不能以编程方式更改添加到我的表的按钮的高度,但在表外没有问题?我确信这是一些我没有找到的设置或调整。任何帮助都值得赞赏,因为我在我的智慧结束。提前谢谢。
答案 0 :(得分:3)
我解决了我的问题。原来这是一个订购问题。问题是我在将按钮添加到表之前设置了高度。这导致按钮的LayoutParams没有任何父节点,如下所述:ViewGroup.getLayoutParams()。这是我需要做的(基本上,在将按钮添加到表后更改高度):
table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//now change the height so the buttons aren't so big...
final float scale = getResources().getDisplayMetrics().density;
int heightDp = (int) (33 * scale + 0.5f);
ViewGroup.LayoutParams params = b.getLayoutParams();
params.height = heightDp;
b.setLayoutParams(params);
b.requestLayout();
table.requestLayout();
劳伦斯上面提出了最后两行。表格和按钮似乎没有这些更新。但是,在我看来,为了以防万一,更新是一个好主意。
答案 1 :(得分:2)
试试这个
int heightDp = (int) (33 * scale + 0.5f);
int widthDp = (int) (60 * scale + 0.5f);
ViewGroup.LayoutParams bLp = new ViewGroup.LayoutParams(widthDp,heightDp);
b.setLayoutParams(bLp);
而不是
b.setHeight(heightDp);
b.setWidth(widthDp);
答案 2 :(得分:1)
我认为您需要致电View.requestLayout,每次添加/删除子视图时都不会自动完成此操作。