【问题标题】:How to remove this extra space next to a checkbox?如何删除复选框旁边的这个额外空间?
【发布时间】:2011-07-10 18:26:54
【问题描述】:

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

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

现在我尝试将宽度设置为 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));
        }

提前谢谢你!

【问题讨论】:

    标签: android checkbox android-widget padding margin


    【解决方案1】:

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

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

    【讨论】:

    • 所以这让我走上了正确的道路。我认为这与顶部标题行以及它如何尝试调整它的大小有很大关系。当我将它设置为跨越所有 4 个时,它缩小了大约一半,但仍然有一个很好的 10-15 像素空间。然后我尝试设置布局参数,它完全消失了。这让我找到了对我有用的答案! stackoverflow.com/questions/3696843/…
    • 太棒了!为了将来参考,任何以“layout_”开头的 XML 视图属性都是 LayoutParams 属性。您使用的 LayoutParams 类型始终取决于父视图。
    • 是的,这很麻烦,因为我只能看到你可以设置的是 match_parent 和 wrap_content... 但是创建我自己的实例并像这样调整它非常令人耳目一新。再次感谢您的帮助。
    【解决方案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 的内容。感谢您帮助解决此问题!

    【讨论】:

    • 感谢您发布自己问题的答案。我希望更多的人会这样做,而不是在找到解决方案后让他们得不到答复。 +1
    • 没问题。当我在这里或其他地方遇到未回答的问题时,我讨厌。由于我认为在我的搜索中完全缺乏关于这个问题的质量信息,我绝不会对此置之不理。希望它可以节省别人我拉头发的时间:)
    • 我讨厌人们用 I found a solution 来回答他们自己的问题,仅此而已。
    【解决方案3】:

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

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

    table.setShrinkAllColumns(true);

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

    table.setColumnShrinkable(int columnIndex, boolean isShrinkable)

    【讨论】:

    • 我试过这个,但我认为它不起作用,因为标题行跨越所有列,所以它缩小到那个,而不是第二行中小得多的列。但是... +1,因为我什至不知道它在那里...谢谢!
    • 您可以将标题行设为表格行,其中包含空白单元格、标题、空白单元格、空白单元格。这将允许您在不影响标题的情况下缩小第一列。
    • 如何在表格布局中制作空白单元格?只需添加一个虚拟文本视图或其他什么?
    • 太棒了,谢谢,我会尝试一下,只是为了学习。
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 2012-04-18
    • 2010-12-20
    • 2013-01-28
    • 2021-01-15
    • 2018-02-18
    相关资源
    最近更新 更多