2013-11-30 2 views
0

У меня есть функция обратного отсчета в моем приложении. Каждую секунду таймер устанавливает текущее время в 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», он отображается правильно.

Может кто-нибудь указать мне на проблему?

Приветствия, Стефан

UPDATE: я понял, что моя 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 

Результаты:

Point (1080, 1776)

Дисплей ID 0: DisplayInfo {«Integrierter Bildschirm», приложение 1080 x 1776, реальное 1080 x 1920, самое большое приложение 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 {de nsity = 3.0, width = 1080, height = 1776, scaledDensity = 3.0, xdpi = 442.451, ydpi = 443.345}, isValid = true

Это ошибка на сайте Sony?

ответ

0

После того, как я внедрил свой собственный TextView с собственным OnDraw, я увидел, что в LogCat произошла ошибка: ERROR/OpenGLRenderer (2503): размер шрифта для большого размера в кеше.

После короткого исследования я выяснил, что это действительно ошибка в Android.

Addding эту строку в моей пользовательской TextView сделал трюк для меня:

this.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
Смежные вопросы