我的 Activity 中有一个 TableLayout
。这是其中的一行。
<TableRow
android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/date_won"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/date_won"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/prize_won"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/amount_won"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/claimed_or_not"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/claimed_or_not"
android:textColor="@color/white"
android:textSize="12sp" />
</TableRow>
<TableRow
android:id="@+id/row_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal" >
<TextView
android:id="@+id/date_won_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hyphen"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/prize_won_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hyphen"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/claimed_or_not_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hyphen"
android:textColor="@color/white"
android:textSize="12sp" />
</TableRow>
以下代码在运行时根据数据库表中的行数添加表行。
luckyDrawHisotry = (TableLayout) findViewById(R.id.table);
contentRow = (TableRow) findViewById(R.id.row_content);
LayoutParams contentRowLayoutParams = contentRow.getLayoutParams();
dateText = (TextView) findViewById(R.id.date_won_content);
LayoutParams dateLayoutParams = dateText.getLayoutParams();
prizeText = (TextView) findViewById(R.id.prize_won_content);
LayoutParams prizeLayoutParams = prizeText.getLayoutParams();
claimedOrNot = (TextView) findViewById(R.id.claimed_or_not_content);
LayoutParams claimedLayoutParams = claimedOrNot.getLayoutParams();
if (prizeDao.loadAll().size() > 0) {
Prize prize = prizeDao.loadAll().get(0);
dateText.setText(Utils.stringFromDate(prize.getWinningDate()));
prizeText.setText(prize.getPrizeName());
if(prize.getPrizeRecieved())
claimedOrNot.setText("yes");
else
claimedOrNot.setText("no");
}
if (prizeDao.loadAll().size() > 1){
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int pixelSize = (int) (12 * dm.scaledDensity);
for (int i = 1; i < prizeDao.loadAll().size(); i++) {
Prize prize = prizeDao.loadAll().get(i);
TableRow row = new TableRow(this);
lastRowId = lastRowId + 10;
row.setLayoutParams(contentRowLayoutParams);
row.setId(lastRowId);
TextView dText = new TextView(this);
dText.setLayoutParams(dateLayoutParams);
dText.setTextSize(pixelSize);
dText.setTextColor(getResources().getColor(R.color.white));
TextView pText = new TextView(this);
pText.setLayoutParams(prizeLayoutParams);
pText.setTextSize(pixelSize);
pText.setTextColor(getResources().getColor(R.color.white));
TextView cText = new TextView(this);
cText.setLayoutParams(claimedLayoutParams);
cText.setTextSize(pixelSize);
cText.setTextColor(getResources().getColor(R.color.white));
dText.setText(Utils.stringFromDate(prize.getWinningDate()));
pText.setText(prize.getPrizeName());
if(prize.getPrizeRecieved())
cText.setText("yes");
else
cText.setText("no");
row.addView(dText);
row.addView(pText);
row.addView(cText);
luckyDrawHisotry.addView(row);
}
}
我在 xml 文件中为表创建了第一行,以便我可以比较动态创建的行和创建为 xml 的行。
结果如下。
如您所见,代码添加的行比xml创建的行大。我做错了什么吗?
最佳答案
你想要12dip
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12,
getResources().getDisplayMetrics());
来自 TypedValue.applyDimension
的文档
Converts an unpacked complex data value holding a dimension to its final floating point value. The two parameters unit and value are as in TYPE_DIMENSION.
编辑:直到现在我才意识到您在布局中使用了 sp
。要获得 12sp
,您应该只将第一个参数更改为:COMPLEX_UNIT_SP
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12,
getResources().getDisplayMetrics());
您还可以使用带有两个参数的 setTextSize:
setTextSize( TypedValue.COMPLEX_UNIT_PX, 12);
第一个是单位。您可以找到文档 here
关于android - Android中动态创建的UI组件的文本大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483219/