SP и DP не работают так, как вы могли бы ожидать.Предполагается, что DP «не зависит от дисплея», а SP описывается как то же самое;но может быть масштабировано (предположительно с помощью команд «масштабирования»).Однако они не работают так, как вы ожидаете.
Например, у меня есть два устройства: телефон 320x480 и Nexus;который 800x1280 НО, который описывает себя как sw600 (я понятия не имею, почему).Чтобы увидеть, что происходит, я добавил текстовое представление в свое представление, которое состоит из 60 символов 'X' (выбрано потому, что они выглядят так же, как и моноширинные).
Для textView textSize было установлено значение 10dp, и60 из них полностью заполняют экран Nexus.Однако на телефоне они выглядят точно одинакового размера и образуют почти две строки.
Итак, кажется, что DP не отображается независимо;но просто описывает (приблизительное) количество пикселей, каждому символу будет дан максимум.Определение размера в SP не имеет значения.
Это не очень полезно - я ожидал, что будет применена некоторая форма масштабирования, чтобы я мог выбрать подходящий размер на своем телефоне, и он будет масштабироваться дляNexus.
Например, если моя строка текста была длиной около тридцати символов, и я хотел, чтобы она заполняла всю строку по экрану, я бы определил ее как 10dp;и каждый дп будет один пиксель (примерно).Затем, когда он был нарисован на Nexus, каждый dp был бы в два пикселя, и он выглядел бы в два раза больше.
Насколько я могу сказать, это не так;что делает его довольно бесполезным.
Мое единственное решение , и оно не изящно, - это использовать измерения только из файла измерения. xml, и иметь шесть из них, один длякаждый из общих значений ширины (240 320 480 180 700 720 - все, что выше, может разобраться сам), затем спроектируйте мой код так, чтобы он соответствовал Nexus, и используйте электронную таблицу, которую я написал, для масштабирования любых значений в dimensions.xml для общих значений ширины.Это боль;но это работает.
Если я не использую это неправильно, система Android просто сломана.