我有一个Android应用程序,根据Android设备的分辨率动态缩放文本.
我已在Android模拟器中的所有预定义分辨率上测试了此代码,我的代码运行正常. (这包括与HTC Desire和Motorola Droid相同的分辨率)
它也适用于我的HTC Wildfire.
以下是模拟器的一些屏幕截图:
但是……我在HTC Desire上尝试了这个,我收到了使用Motorola Droid的用户报告,这些字体没有正确缩放:
请注意它是如何切断文本的.
任何想法为什么这不适用于这些特定的设备?
我目前有一个函数可以根据文本的可用高度缩小文本…这样的事情:
public static float calculateHeight(FontMetrics fm) {
return Math.abs(fm.ascent) + fm.descent;
}
public static int determineTextSize(Typeface font, float allowableHeight) {
Paint p = new Paint();
p.setTypeface(font);
int size = (int) allowableHeight;
p.setTextSize(size);
float currentHeight = calculateHeight(p.getFontMetrics());
while (size!=0 && (currentHeight) > allowableHeight) {
p.setTextSize(size--);
currentHeight = calculateHeight(p.getFontMetrics());
}
if (size==0) {
System.out.print("Using Allowable Height!!");
return (int) allowableHeight;
}
System.out.print("Using size " + size);
return size;
}
任何想法为什么只在几个设备上发生这种情况?以及如何解决它?
还有其他字体指标,而不是我需要考虑的,我不知道吗?像Scale还是DPI?
谢谢.
解决方法:
我想提一下两件事.
根据我的经验,我通过从FontMetrics.bottom中减去FontMetrics.top来计算字体高度(以像素为单位).这是由于Y轴的底部和顶部的正负值.请参阅Android文档.所以我会改变你的calculateHeight方法如下:
public static float calculateHeight(FontMetrics fm) {
return fm.bottom - fm.top;
}
其次,您应该记住,您的determineTextSize方法将返回以像素为单位的大小.如果您使用它来设置TextView的文本大小,那么您应该将单位指定为TypedValue.COMPLEX_UNIT_PX.此方法的默认单位是TypedValue.COMPLEX_UNIT_SP
标签:java,android,fontmetrics 来源: https://codeday.me/bug/20190531/1188255.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。