Официальная документация , похоже, не отвечает на этот вопрос, или я не могу разберись.
Элемент (не говоря уже об AlertDialog
, это также происходит с любым TextView):
TextView tv = (TextView) dialog.findViewById(android.R.id.message);
Несогласованность. Случай A:
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
// or tv.setTextSize(14); does the same
Случай B:
tv.setTextSize(getResources().getDimension(R.dimen.text_size_small));
// TypedValue makes no difference either.
где values / sizes.xml
содержит его:
14sp
Результат: размер шрифта не тот, и он кажется намного больше при извлечении из ресурса. Я, наверное, чего-то упускаю, в чем моя ошибка, и самая важная: почему?
- ОБНОВЛЕНИЕ ПЕРВОГО ОТВЕТА -
Фиксированное число было просто примером, так как никто не стал бы жесткий код фиксированные размеры шрифта в коде. Итак, позвольте мне перефразировать вопрос:
Почему, если я получаю ресурс из кода, размер текста больше, чем когда я получаю ресурс из XML-макета? Кроме того, вопрос все тот же: как мне получить блок 14sp в коде и сохранить его согласованность с блоком 14sp, установленным в XML макета? Я не принял ответ, потому что он не говорит мне, как использовать единицы sp из ресурса в коде для размера текста.
В этом макете размер шрифта другой, даже если размер тот же:
стили .xml:
Видите там text_size_small? Почему в этом случае размер шрифта меньше, чем в коде, при использовании того же ресурса dimen
?