Android 文本大小以填充屏幕宽度

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

我的应用程序中有倒计时功能。 每隔一秒钟,计时器就会将当前时间设置为TextView。 所以字符串是:“56:05”,“56:04”,“56:03”,“56:02”

我想使文本大小尽可能大

因此,我编写了以下代码

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);