2015-08-13 2 views
0

Я развиваюсь в Android, и я хочу, чтобы мое приложение масштабировалось от смартфона до полноэкранного телевизора. Я пытаюсь получить размер шрифта моих кнопок, TextViews, ListViews и Canvas для правильного масштабирования. До сих пор я использовал множество пользовательских методов для выполнения задания (вида).Динамическое определение текста в моем приложении

В настоящее время я хватаю пиксели и плотность пикселей от устройства Android во время выполнения и выполняю быстрые вычисления на них, чтобы получить правильный размер шрифта. Это своего рода работа, но это немного отличается от меня. Мне сложно менять шрифт на более сложных объектах, таких как ListViews, которые обмениваются данными через ArrayAdapters. Это лучшее, что у меня есть? Или существует более разумное решение для правильной настройки размера текста приложения между всеми размерами устройств?

Текущее состояние моей программы:

Таблетка:

  • Разрешение экрана: 1280x800

  • Плотность пикселей: 1

  • Рассчитано размер шрифта: 61sp

  • Appearan в.п.: макет выглядит хорошо

Телефон:

  • Разрешение экрана: 1920x1080

  • Плотность пикселей: 3

  • Рассчитано Размер шрифта: 27sp

  • Appearance : В основном хорошо. Не совершенным масштаба, так как это не то же самое отношение, как таблетки

Статические методы:

public static Point GetScreenDimensions(Context context){ 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    return size; 
} 

public static void SetTextSize(Context context){ 
    TEXT_SIZE_CANVAS = GetScreenDimensions(context).y/15; 
    TEXT_SIZE_ACTIVITY = (GetScreenDimensions(context).y/13)/(int) GetScaledDensity(context); 
} 

public static float GetScaledDensity(Context context){ 
     return context.getResources().getDisplayMetrics().density; 
} 

Применение в активности (метод говорит, что документы устанавливает Int при условии как значение SP):

btnManageTeams.setTextSize(Constants.TEXT_SIZE_ACTIVITY); 

Результат: размеры текста, которые в основном устройства агностиком.

ответ

0

Отъезд Supporting Multiple Screens documentation - они имеют раздел говорит о именовании для папок, так что вы можете сделать это на основе плотности (ldpi, xhdpi и т.д., но они также имеют tvdpi).

Во всяком случае, для различных размеров текста, кнопок и т.д. Вы можете поместить соответствующие drawable с в их собственную папку, а затем просто использовать один файл layout и пусть система тянуть правильно размер drawable. Эти drawable s могут быть изображениями, 9-патчами или файлами XML (где вы можете определять такие вещи, как размер шрифта, разные цвета).Например, если у меня есть макет с иконкой сохранить, то мой макет просто вызывает ic_save, но потом мои разные папки:

вытяжки-MDPI/

  • ic_save.png (скажем, это 10px широкий)

вытяжке-ИПЧР/

  • ic_save.png (то это будет 20px в ширину)

вытяжке-xhdpi/

  • ic_save.png (и это будет 25px шириной)

Вот несколько других полезных ссылок в частности, касающиеся проектирования для телевидения:

+0

Я буду читать эту страницу в ближайшее время. Является ли mdpi, hdpi и xhdpi решаемой по плотности пикселей используемого устройства? – Shadoninja

+0

@Shadoninja Правильно, любое устройство попадет в одну из этих категорий плотности, поэтому вы должны предоставить ресурсы, соответствующие соответствующим образом для каждого – WOUNDEDStevenJones

Смежные вопросы