读书人

请教怎么设置TableRow中的View的宽度和

发布时间: 2012-03-25 20:55:16 作者: rapoo

请问如何设置TableRow中的View的宽度和高度?

Java code
    TableRow.LayoutParams buttonLayout = new TableRow.LayoutParams(100, 100); //无效    buttonLayout.weight = 1;    buttonLayout.gravity = Gravity.CENTER_VERTICAL;    buttonLayout.setMargins(5, 5, 5, 5);    final View button = renderButton(mToolBar.buttons.get(index), context);    TableRow row = new TableRow(context);        row.addView(button, buttonLayout);

TableRow的document说“The children of a TableRow do not need to specify the layout_width and layout_height attributes in the XML file. TableRow always enforces those values to be respectively MATCH_PARENT and WRAP_CONTENT.”在仍然使用TableRow作为父控件的情况下(但不一定仍然使用TableRow.LayoutParams),有办法设置button的大小吗?


[解决办法]
先要有个下面的类
Java code
public class TableAdapter extends BaseAdapter {    private Context context;    private List<TableRow> table;    public TableAdapter(Context context, List<TableRow> table) {        this.context = context;        this.table = table;    }    @Override    public int getCount() {        return table.size();    }    @Override    public long getItemId(int position) {        return position;    }    public TableRow getItem(int position) {        return table.get(position);    }    public View getView(int position, View convertView, ViewGroup parent) {        TableRow tableRow = table.get(position);        return new TableRowView(this.context, tableRow);    }    /**     * TableRowView 实现表格行的样式     *      * @author hellogv     */    class TableRowView extends LinearLayout {        public TableRowView(Context context, TableRow tableRow) {            super(context);            this.setOrientation(LinearLayout.HORIZONTAL);            for (int i = 0; i < tableRow.getSize(); i++) {// 逐个格单元添加到行                TableCell tableCell = tableRow.getCellValue(i);                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(                        tableCell.width, tableCell.height);// 按照格单元指定的大小设置空间                layoutParams.setMargins(0, 0, 1, 1);// 预留空隙制造边框                if (tableCell.type == TableCell.STRING) {// 如果格单元是文本内容                    TextView textCell = new TextView(context);                    textCell.setLines(1);                    textCell.setGravity(Gravity.CENTER);                    textCell.setBackgroundColor(Color.BLACK);// 背景黑色                    textCell.setTextSize(16);                    textCell.setText(String.valueOf(tableCell.value));                    addView(textCell, layoutParams);                } else if (tableCell.type == TableCell.IMAGE) {// 如果格单元是图像内容                    ImageView imgCell = new ImageView(context);                    imgCell.setBackgroundColor(Color.BLACK);// 背景黑色                    imgCell.setImageResource((Integer) tableCell.value);                    addView(imgCell, layoutParams);                }            }            this.setBackgroundColor(Color.WHITE);// 背景白色,利用空隙来实现边框        }    }    /**     * TableRow 实现表格的行     *      * @author hellogv     */    static public class TableRow {        private TableCell[] cell;        public TableRow(TableCell[] cell) {            this.cell = cell;        }        public int getSize() {            return cell.length;        }        public TableCell getCellValue(int index) {            if (index >= cell.length)                return null;            return cell[index];        }    }    /**     * TableCell 实现表格的格单元     *      * @author hellogv     */    static public class TableCell {        static public final int STRING = 0;        static public final int IMAGE = 1;        public Object value;        public int width;        public int height;        private int type;        public TableCell(Object value, int width, int height, int type) {            this.value = value;            this.width = width;            this.height = height;            this.type = type;        }    }} 

读书人网 >Android

热点推荐