超级简单的问题:adroid上字体大小与屏幕分辨率的关系是什么? AVD?例如。如果分辨率宽度为100px并且TextView中有10个等宽字符,如果文本大小为10px,我可以保证文本占据全屏宽度吗?
我的具体问题是我需要使用textSize缩放10个字符的文本,以使用全屏宽度(仅使用textSize)。如果屏幕分辨率为100 x 100,我希望10个字符水平完全占据屏幕,为什么我不能使用:
DisplayMetrics metrics = getResources().getDisplayMetrics();
float pixelFontSize = metrics.widthPixels / 10f;
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, pixelFontSize);
?在我的测试中,我得到的文本是280 x 280和280 dpi AVD的小文本(使用大约1/3的分辨率),而另一个AVD 360 x 330 hdpi,上面的代码产生的文字太大而不适合在一条线上。 ...我的意思是,确定我可以看到需要从pixcelFontSize中减去一小部分来考虑文本布局,但我的结果到处都是。我肯定错过了什么。首先我弄乱了密度和缩放的测量dp和sp,但逻辑上会说,鉴于我的问题,密度与它完全没有关系,对吧?
编辑,为了进一步显示问题,这里是我的解决方案,缩放文字以适应显示,使用字体大小,7或8 AVD所有磨损,方形圆和下巴
switch (metrics.widthPixels) {
case 280: //280 dpi
resolutionMultiplier = .4f;
ideoResolutionMultiplier = 0f;
break;
case 360: //hdpi
resolutionMultiplier = .5f;
ideoResolutionMultiplier = .0f;
break;
case 320: //works for round hdpi, chin tvdpi, but the res 320 square 280 dpi too tall....
if(metrics.xdpi == 280) {
resolutionMultiplier = .45f;
ideoResolutionMultiplier = 0f;
}
else {
resolutionMultiplier = .47f;
ideoResolutionMultiplier = 0f;
}
break;
case 400: //280 dpi
resolutionMultiplier = .55f;
ideoResolutionMultiplier = 0f;
break;
case 480: //360 dpi
resolutionMultiplier = .71f;
ideoResolutionMultiplier = 0f;
break;
}
if (mWzTheme.mWordArrays != null
&& mWzTheme.mWordArrays.isIdeographic()) {
pixelFontSize = (metrics.widthPixels / new Integer(Constants.MAX_LINE_LENGTH_CHINESE_WATCH).floatValue())
+ (new Integer(Constants.MAX_LINE_LENGTH_WATCH).floatValue() * ideoResolutionMultiplier);
}
else {
pixelFontSize = (metrics.widthPixels / new Integer(Constants.MAX_LINE_LENGTH_WATCH).floatValue())
+ (new Integer(Constants.MAX_LINE_LENGTH_WATCH).floatValue() * resolutionMultiplier);
}
答案 0 :(得分:1)
试试这个库:
https://github.com/AndroidDeveloperLB/AutoFitTextView
这将使文本完全适合屏幕。 (不确定Android Wear目标是否存在任何问题。)
答案 1 :(得分:1)
这是一个简单的解决方案:
class FontColors:
def __init__(self):
self.PURP = '\033[95m'
self.LIGHTBLUE = '\033[94m'
self.ENDC = '\033[0m'
self.UNDERLINE = '\033[4m'
self.LIGHTYELL = '\033[92m'
self.BYELL = '\033[93m'
self.FRED = '\033[91m'
self.BOLD = '\033[1m'
color = FontColors()
# you can try like this - **the color.ENDC meant to make the output normal again.**
print "{0}This is a Purple output{1}".format(color.PURP, color.ENDC)
# or like this
print color.BYELL + "This is a Yellow output" + color.ENDC
...但仍然需要猜测算法从屏幕分辨率到用x字符填充屏幕所需的字体大小......