2010-11-23 7 views
2

Я бы не сказал, что мое приложение тяжелое для текста ... но оно отображает случайные строки, иногда более длинные, чем другие. Они отлично подходят для моего дроида-2, но я знаю, что они не будут отображаться на меньших дроидах. Кто-нибудь знает правильный способ форматирования текста разного размера, чтобы убедиться, что он будет работать на всех андроидах?Должен ли я использовать dip, dp, sip или sp для форматирования текста?

+1

Определить работу. Он будет работать на всех дроидов.Это зависит от того, как вы хотите его отображать. – Falmarri 2010-11-23 19:56:51

ответ

6

Если вы просто хотите, чтобы сделать какой-то текст больше или меньше, вы должны предпочесть использовать стили по умолчанию, предоставляемые Android:

<TextView ... android:textAppearance="?android:attr/textAppearanceMedium" /> 
<TextView ... android:textAppearance="?android:attr/textAppearanceLarge" /> 
<TextView ... android:textAppearance="?android:attr/textAppearanceSmall" /> 

Ни один из них по умолчанию, по умолчанию:

<TextView ... android:textAppearance="?android:attr/textAppearance" /> 

это может быть, конечно, применяться не только к TextView, но и другому виду, а также.

3

Google рекомендует использовать sp для размеров текста. Используемые макеты должны работать, поэтому, когда макет масштабируется, он работает на всех размерах в максимально возможной степени (вам могут понадобиться макеты для разных размеров экрана). Если текст может не поместиться, обернуть его или ellipsize его

0

SP и DP не работают так, как вы могли ожидать. DP должен быть «независимым от дисплея», а SP описывается как то же самое; но могут быть масштабированы (предположительно с помощью команд «масштабирования»). Однако они не работают так, как вы ожидали.

Например, у меня есть два устройства, телефон 320x480 и Nexus; который 800x1280 BUT, который описывает себя как sw600 (я не знаю, почему). Чтобы увидеть, что происходит, я добавил текстовое представление к моему представлению, которое состоит из 60 символов «Х» (выбрано потому, что они выглядят одинаковыми с чередованием моноширин).

TextView textSize был установлен в 10dp, а 60 из них полностью заполняют экран Nexus. Однако они выглядят точно так же, как на телефоне, и образуют почти две строки.

Итак, похоже, что DP не является независимым от дисплея; а просто описывает (приблизительное) количество пикселей, каждый символ будет указан максимум. Определение размера в SP не имеет значения.

Это не очень полезно - я ожидал, что будет применена какая-то форма масштабирования, поэтому я мог бы выбрать подходящий размер на своем телефоне, и он будет масштабироваться для Nexus.

Например, если моя строка текста была длиной около тридцати символов, и я хотел, чтобы она заполнила всю строку по экрану, я бы определил ее как 10dp; и каждый dp будет одним пикселем (примерно). Затем, когда он был нарисован на Nexus, каждый dp был бы двумя пикселями, и он выглядел бы вдвое больше.

Это не так, как это работает, насколько я могу судить; что делает его довольно бесполезным.

Мое единственное решение, и это не элегантный один, чтобы использовать только размеры из файла dimens.xml, и иметь шесть из них, по одному для каждой из общих ширины (240.320.480.600.720.800 - все выше, можно сортировать сам), затем создайте мой код, чтобы он поместился на Nexus, и используйте таблицу, которую я написал, чтобы масштабировать любые значения в dimens.xml для общей ширины. Это боль; но он работает.

Если я не ошибаюсь, система Android просто сломана.