Android 文本大小以填充屏幕宽度
我的应用程序中有倒计时功能。 每隔一秒钟,计时器就会将当前时间设置为TextView。 所以字符串是:“56:05”,“56:04”,“56:03”,“56:02” 我想使文本大小尽可能大 因此,我编写了以下代码Android 文本大小以填充屏幕宽度,android,android-layout,textview,Android,Android Layout,Textview,我的应用程序中有倒计时功能。 每隔一秒钟,计时器就会将当前时间设置为TextView。 所以字符串是:“56:05”,“56:04”,“56:03”,“56:02” 我想使文本大小尽可能大 因此,我编写了以下代码 private void measureAndSetText(String text) { Paint pMeasure = new Paint(); Integer iWidth = _tvContent.getWidth(); Float maxText
private void measureAndSetText(String text) {
Paint pMeasure = new Paint();
Integer iWidth = _tvContent.getWidth();
Float maxTextSize = 1000f;
pMeasure.setTextSize(maxTextSize);
pMeasure.setFakeBoldText(true);
Float fCurrentWidth = pMeasure.measureText(text);
while (fCurrentWidth > iWidth) {
pMeasure.setTextSize(maxTextSize -= 1);
fCurrentWidth = pMeasure.measureText(text);
}
_tvContent.setText(text);
_tvContent.setTextSize(TypedValue.COMPLEX_UNIT_PX, maxTextSize);
}
这段代码似乎适用于我的Note2、Lg Optimus 4x HD、Galay ACE和其他一些产品。
但不是在我的Xperia Z上以横向模式。
我想原因是全高清显示,但我不明白为什么。
在Xperia Z上,仅以横向模式显示“:”标志。所以我认为文本被包装了,但我不知道为什么。
如果我设置的文本大小高于屏幕高度(在横向模式下,这实际上是屏幕宽度->1080),这对我来说是有意义的,但事实并非如此。
当我尝试设置较长的文本->asdfasd asdf时,它会正确显示
有人能给我指出这个问题吗
干杯,
斯特凡
更新:
我发现保存TextView宽度的iWidth变量(_tvContent.getWidth())的值为1770。
既然我的Xperia Z只有1920x1080,那怎么可能
因此,我认为这可能是TextView.getWidth()中的失败,并添加了以下代码:
Display display3 = getWindowManager().getDefaultDisplay();
Point size3 = new Point();
display3.getSize(size3);
int width = size3.x;
Display display1 = getWindowManager().getDefaultDisplay();
int width1 = display1.getWidth(); // deprecated
int height1 = display1.getHeight(); // deprecated
Display display = getWindowManager().getDefaultDisplay();
Integer iWidth = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
结果:
点(10801776)
显示id 0:DisplayInfo{“Integrierter Bildschirm”,应用程序1080 x 1776,real 1080 x 1920,最大的应用程序1794 x 1701,最小的应用程序1080 x 1005,60.0 fps,旋转0,密度480,442.451 x 443.345 dpi,layerStack 0,内置类型,地址为空,标志为安全,标志为支持受保护的缓冲区,DisplayMetrics{密度=3.0,宽度=1080,高度=1776,标度密度=3.0,xdpi=442.451,ydpi=443.345},isValid=true
这是索尼网站上的一个Bug吗?在我用自己的OnDraw实现了自己的TextView后,我发现LogCat中有一个错误:error/OpenGLRenderer(2503):字体大小太大,无法放入缓存 经过短暂的研究后,我发现这确实是安卓系统的一个缺陷 将这一行添加到我的自定义文本视图为我实现了以下目的:
this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);