文本化以填充屏幕宽度

时间:2013-11-30 01:57:46

标签: 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 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上。 我想原因是Full Hd Display,但我不明白为什么。 在Xperia Z上,只有“:”符号以横向模式显示。所以我认为文本被包装但我不知道为什么。 如果我设置的文本大小高于屏幕高度(在横向模式下,这实际上是屏幕宽度 - > 1080),对我来说是有意义的,但事实并非如此。 当我尝试设置更长的文本时 - > “asdfasd asdf”正确显示。

有人能指出我的问题吗?

干杯, 斯蒂芬

更新: 我发现我的iWidth变量保持了我的TextView(_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

结果:

点(1080,1776)

显示ID 0:DisplayInfo {“Integrierter Bildschirm”,应用1080 x 1776,真实1080 x 1920,最大app 1794 x 1701,最小应用1080 x 1005,60.0 fps,旋转0,密度480,442.451 x 443.345 dpi, layerStack 0,输入BUILT_IN,地址为null,FLAG_SECURE,FLAG_SUPPORTS_PROTECTED_BUFFERS},DisplayMetrics {density = 3.0,width = 1080,height = 1776,scaledDensity = 3.0,xdpi = 442.451,ydpi = 443.345},isValid = true

这是Sony的网站上的Bug吗?

1 个答案:

答案 0 :(得分:0)

在用自己的OnDraw实现我自己的TextView后,我发现LogCat中有一个错误:ERROR / OpenGLRenderer(2503):字体大小很大,适合缓存。

经过短暂的研究后,我发现这确实是Android中的一个Bug。

将此行添加到我的自定义TextView为我做了诀窍:

this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);