如何删除复选框旁边的这个额外空格?

时间:2011-03-08 00:41:01

标签: android checkbox android-widget padding margin

首先,我是Android开发的新手,一些看似简单的任务让我感到沮丧。这是对此处回答的问题的后续问题:Changing the checkbox size in Android 2.0

它的要点是,由于某种原因,这个额外的空间会一直显示在我的复选框旁边(见下文)。

Space Next to checkboxes

现在我尝试将宽度设置为1,并且它不会比显示的更短。我试图将宽度设置得更大,我可以使尺寸更大,但不会更短。

请查看下面的代码并告诉我您的看法。

TableLayout table = (TableLayout) findViewById(R.id.timeEntriesTable);


        for (int i = 0; i < timeEntries.getLength(); i++)
        {
            Element element = (Element) timeEntries.item(i);
            TableRow tr = new TableRow(this);
            tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

            CheckBox box = new CheckBox(this);
            box.setButtonDrawable(getResources().getDrawable(R.drawable.checkbox_off_background));
            box.setPadding(0,0,0,0);
            box.setWidth(1);
            box.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    CheckBox box = (CheckBox) v;
                    if (box.isChecked())
                    {
                        box.setButtonDrawable(getResources().getDrawable(R.drawable.checkbox_on_background));
                    }
                    else
                    {
                        box.setButtonDrawable(getResources().getDrawable(R.drawable.checkbox_off_background));
                    }

                }
            });

            TextView dateBox = new TextView(this);

            String dateText = element.getAttribute("date");
            dateBox.setText(dateText);
            dateBox.setTextColor(Color.BLACK);

            TextView customerBox = new TextView(this);

            String customerName = element.getAttribute("customer");
            customerBox.setText(customerName);
            customerBox.setTextColor(Color.BLACK);

            TextView hoursBox = new TextView(this);

            String hours = element.getAttribute("hours");
            hoursBox.setText(hours);
            hoursBox.setTextColor(Color.BLACK);

            TextView test = new TextView(this);
            test.setTextColor(Color.RED);
            test.setText("Test");

            tr.addView(box);                
            tr.addView(dateBox);
            tr.addView(customerBox);
            tr.addView(hoursBox);



            table.addView(tr, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        }

提前谢谢!

3 个答案:

答案 0 :(得分:2)

看起来很可疑,“时间条目”标题位于标题行中自己的表格单元格中,并且其下方的复选框列匹配相同的宽度。 (看看文本的右边缘如何与下面的日期完美排列?)由于复选框的layout_gravity可能默认为TOP|LEFT,因此它位于单元格的左上角。

尝试更改复选框的标题行或layout_gravity。

答案 1 :(得分:2)

所以在输入另外两个回答者@adamp和@Phobos之后。我偶然发现了对我有用的东西。

How to set (Text)View attributes programmatically?

添加:

TableRow.LayoutParams lp = new TableRow.LayoutParams();
            lp.width = 15;
            lp.setMargins(3, 5, 0, 0);
            lp.height = 15;
tr.addView(box, lp);

我能够完全按照我想要的方式调整那个单元格。我很奇怪,它不是在增加复选框本身的单元格列。这是因为在Android中没有实际的单元格,它使用视图及其大小来显然生成表格。

我没有遇到任何教程或任何以编程方式设置LayoutParams的方法。感谢您帮助解决此问题!

答案 2 :(得分:1)

表格布局自然希望使所有单元格大小相同。如果您想要一个或多个不同的尺寸,那么需要额外的参数。

要缩小单元格中的所有额外空间,请将其添加到表格对象

table.setShrinkAllColumns(真);

或者只是缩小复选框所在的第一列

table.setColumnShrinkable(int columnIndex,boolean isShrinkable)