我的任务很简单,但任何解决方案看起来都很复杂......我有一个应用程序可以动态生成17个表格,每行有一个textView / editText。现在textSize被硬编码为所有textViews / editText的20f - 它在我的手机上看起来不错,但它与fx不太兼容。平板电脑。我想将textsize设置为一个数字,该数字将使文本的高度为其外部容器的1/17。无论设备具有什么尺寸/分辨率,每个tableRow都将完美地适合屏幕。
How it looks on different scrren sizes - img
How it should looks on different scrren sizes - img
并且无论其他什么样的屏幕;英寸,尺寸,分辨率等。文本行高度应始终为红色框的高度的1/17。这甚至可能吗?
我在kotlin写作,我的UI是动态生成的,我创建行和& textViews是这样的:
fun createRow(label: String, tf: Typeface): TableRow {
val row = TableRow(activity)
row.setBackgroundResource(R.drawable.border)
gameSheetTable.addView(row)
val tw = TextView(activity)
tw.text = label
tw.textSize = textSize
tw.typeface = tf
tw.setTextColor(Color.BLACK)
textViews.add(tw)
row.addView(tw)
return row
}
我尝试过:
针对不同的屏幕尺寸使用不同的值; hdpi,mdpi,xhdpi,xxhdpi,xxxhdpi - 这个结果非常难看,根本不起作用,10"平板电脑被认为是一个大型设备,但分辨率很差,所以文字走出屏幕,其他10"桌子还可以。所以这种方法是无用的。右
我将textSize硬编码为非常小,并制作了一个循环,每个循环都会增加一个。这里的问题是在函数返回之前不会呈现textView。因此,循环条件永远不能检查新textSize是否匹配外容器高度的1/17高度。当调试并踩过' tw.textSize = newTextSize'这也应该增加行的高度,但因为它没有渲染nh = nameRow.height仍然是相同的所以循环只是在无限远...
`
fun resizeText(){
val maxHeight = dgs_cointainer.height
var nh = nameRow.height
while(maxHeight > nh * 17){
textSize += 1
editTexts.forEach {
et -> et.textSize = textSize
}
textViews.forEach {
tw -> tw.textSize = textSize
}
nh = nameRow.height }
}
无法工作
答案 0 :(得分:0)
如果父级是LinearLayout,则对TextView使用权重和weightSum,高度为0dp。这将使textView占父项的一定百分比/权重。
如果父级是RelativeLayout,请使用支持库中的PercentRelativeLayout,它支持百分比。
如果父母不是那两个,那么你必须看看父母对布局选项的支持。