首先,我是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));
}
提前谢谢!
答案 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)