android:从linearlayout中删除填充以创建方形布局

时间:2011-01-04 01:55:54

标签: android layout

我正在尝试用8x8按钮创建一个国际象棋游戏板。我正在使用嵌套的LinearLayouts。问题是ImageViews的每一行之间都有一个填充,我无法摆脱它。这就是我所熟悉的,董事会应该是正方形,但不是:

alt text

public class BoardLayout extends LinearLayout {
    public BoardLayout(Context context) {
        super(context);

        LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);

            setLayoutParams(parms);
            setOrientation(LinearLayout.VERTICAL);
            setPadding(0, 0, 0, 0);

            for (int i = 0; i < 8; i++) {
                LinearLayout row = new LinearLayout(context);
                row.setLayoutParams(parms);
                row.setOrientation(LinearLayout.HORIZONTAL);
                row.setPadding(0, 0, 0, 0);

                for (int j = 0; j < 8; j++) {
                    ImageView button = new ImageView(context);
                    button.setLayoutParams(parms);
                    button.setImageResource(R.drawable.icon);
                    button.setAdjustViewBounds(true);
                    button.setPadding(0, 0, 0, 0);

                    row.addView(button);
                }
                addView(row);
            }
            setSquare();
    }
    public void setSquare() {
        int size = Math.min(getWidth(), getHeight());

        // setHeight(size); // Not Function, but this is what I need
        // setWidth(size); // Not Function, but this is what I need

        // also doesn't work
        setLayoutParams(new LinearLayout.LayoutParams(size, size, 1.0f));
    }
}

解决方案:

正如所建议的,TableLayout更适合我正在尝试做的事情。所以主类应该改为TableLayout,嵌套的LinearLayouts改为TableRows。

但仅此一项并未修复,我还必须在TableLayout中调用以下内容:

setShrinkAllColumns(true);
setStretchAllColumns(true);

并且对于插入的每个项目,我还必须致电:

setAdjustViewBounds(true);

2 个答案:

答案 0 :(得分:1)

  

TableLayout

     

课程概述

     

布置其子项的布局   成行和列。一个TableLayout   由许多TableRow组成   对象,每个对象定义一行   (实际上,你可以拥有其他的   孩子们,这将被解释   下面)。 TableLayout容器没有   显示行的边框线,   列或单元格。

答案 1 :(得分:0)

最好使用GridView或TableLayout而不是嵌套的LinearLayouts,因为这是他们的设计目标。