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