У меня есть приложение для Android, которое динамически масштабирует текст в зависимости от разрешения устройства Android.
Я протестировал этот код на всех предопределенных разрешениях в Android Simulator, и мой код работает нормально. (Это касается тех же разрешений, что и в HTC Desire и Motorola Droid)
Он также отлично работает на моем HTC Wildfire.
Вот несколько скриншотов с симуляторов:
Однако ... Я пробовал это в HTC Desire, и у меня были сообщения от пользователей, использующих Motorola Droid, о том, что шрифты не масштабируются правильно:
Обратите внимание, как отрубается текст.
Есть идеи, почему это не работает на этих конкретных устройствах?
В настоящее время у меня есть функция, которая уменьшает текст в зависимости от доступной высоты для текста ... что-то вроде этого:
public static float calculateHeight(FontMetrics fm) {
return Math.abs(fm.ascent) + fm.descent;
}
public static int determineTextSize(Typeface font, float allowableHeight) {
Paint p = new Paint();
p.setTypeface(font);
int size = (int) allowableHeight;
p.setTextSize(size);
float currentHeight = calculateHeight(p.getFontMetrics());
while (size!=0 && (currentHeight) > allowableHeight) {
p.setTextSize(size--);
currentHeight = calculateHeight(p.getFontMetrics());
}
if (size==0) {
System.out.print("Using Allowable Height!!");
return (int) allowableHeight;
}
System.out.print("Using size " + size);
return size;
}
Есть идеи, почему это происходит только на нескольких устройствах? и как я могу это исправить?
Есть ли другая метрика шрифта, которую мне не нужно рассматривать здесь, о которой я не знаю? Нравится Scale или DPI?
Спасибо.