以编程方式设置ImageButton边距

时间:2016-11-22 19:04:20

标签: android

我已经创建了很多像这段代码的图像按钮:

TableRow tr = new TableRow(this);
if (db != null) {
        if (db.moveToFirst()) {
            do {
                ImageButton button = new ImageButton(this);
                int ID = Integer.parseInt(db.getString(db.getColumnIndex("ID")));
                int resource = getResources().getIdentifier("unit" + ID, "drawable", getPackageName());
                System.out.println("unit" + ID + ":" + resource);
                button.setImageResource(resource);
                button.setOnClickListener(MainActivity.this);
                tr.addView(button);
                button.getLayoutParams().height = 250;
                button.getLayoutParams().width = 250;
                button.setScaleType(ImageView.ScaleType.FIT_CENTER);
                //button.setLayoutParams(tableRowParams);
                rowcount++;
                if (rowcount % 5 == 0) {
                    layout.addView(tr);
                    tr = new TableRow(this);
                }
            } while (db.moveToNext());
        }
    }

我找到了代码:

        TableLayout.LayoutParams tableRowParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT);
        tableRowParams.setMargins(0, 0, 0, 0);

并在do while时按下按钮。

button.setLayoutParams(tableRowParams);

它将显示错误消息“android.widget.TableLayout $ LayoutParams无法强制转换为android.widget.TableRow $ LayoutParams”

2 个答案:

答案 0 :(得分:0)

TableLayout.LayoutParams替换为TableRow.LayoutParams

TableRow.LayoutParams tableRowParams =
        new TableRow.LayoutParams(
            TableRow.LayoutParams.WRAP_CONTENT,
            TableRow.LayoutParams.WRAP_CONTENT);
tableRowParams.setMargins(0, 0, 0, 0);

答案 1 :(得分:0)

您使用的LayoutParams类型取决于视图的容器,而不是视图本身。因此,由于您的按钮位于TableRow内,因此您现在需要使用TableRow.LayoutParams而不是TableLayout.LayoutParams

此外,您还要注意,如果您需要设置TableRow或Button的样式,而不是创建类的新实例并以此方式查看边距,则可以使用{{1来扩展XML布局这样你就可以在XML文件中设置边距。