getDimension () / getDimensionPixelSize () - проблема с множителем
Таким образом, у меня есть устройство Android 2.3.5, которое является нормальным / HDPI. У меня есть измерение. Xml в моем проекте:
...
<dimen name="gameresult_congrats_label_msg_textSize">20sp</dimen>
...
этот файл абсолютно идентичен в папках values-normal / values-hdpi и так далее. В моем первом приложении активность показывает мне это значение, используя:
Toast.makeText(this, "textSize is "+getResources().getDimensionPixelSize(R.dimen.gameresult_congrats_label_msg_textSize), Toast.LENGTH_SHORT).show();
и это показывает 30. Я пробовал также:
Toast.makeText(this, "textSize is "+getResources().getDimension(R.dimen.gameresult_congrats_label_msg_textSize), Toast.LENGTH_SHORT).show();
но результат тот же. Но только когда я попробовал это:
Toast.makeText(this, "textSize is "+getResources().getString(R.dimen.gameresult_congrats_label_msg_textSize), Toast.LENGTH_SHORT).show();
Я получил свой "20sp" наконец-то! Но почему это?Официальные документы говорят, что эти методы возвращается
Значение измерения ресурса, умноженное на соответствующую метрику.
Я проверил это, изменив свое значение на 25 и получил 38, что означает, что aos использует множитель 1,5. Но почему? Он уже получает значение из соответствующей папки, что означает, что он получает готовое значение! Откуда AOS получает этот 1,5-кратный множитель? Я знаю, что это зависит от DisplayMetrics. Но как он рассчитывает 1,5x?
ОБНОВИТЬ
Я понимаю о множителе, но, видите ли, настоящая проблема здесь в двойном масштабировании. И именно поэтому я задал этот вопрос.
Так что если у меня есть файл layout.xml (в папке res \ layout) с определением TexView, например:
<TextView
android:id="@+id/congratsLabel"
...
android:textSize="@dimen/gameresult_congrats_label_msg_textSize" />
Все выглядит хорошо. Я имею в виду textview, как я ожидаю.
Теперь давайте сделаем то же самое в коде:
TextView congratsLabel = fineViewById(R.id.congratsLabel);
textSize = getResources().getDimension(R.dimen.gameresult_congrats_label_msg_textSize)
congratsLabel.setTextSize(textSize)
и вот проблема !!! getResources (). getDimension () возвращаетмасштабируется ценность и вот ок. Но итоговый размер моего textView будет на 1,5 больше, чем я ожидал, потому что setTextSize работает с SP, и вот вторая шкала! И именно поэтому AOS делает результирующий размер текста, масштабируемый до 45 (первоначально определяемый как 20sp).