TypedValue.applyDimension создает неправильные размеры - PullRequest
0 голосов
/ 23 февраля 2020

Я использую TypedValue.applyDimension и displayMetrix.scaledDensity, чтобы установить размер текста в TextView на моем Xiaomi Redmi 5 plus и получить удивительные результаты: текст в TextView намного больше, чем один (то же значение sp), установленный в атрибуте макета. Вот мой макет:

<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center|start"
    android:layout_margin="4dp"
    android:text="Some Text"
    android:textSize="18sp" />

А вот как я могу изменить размер текста:

TextView titleView = itemView.findViewById(R.id.my_text_view);
titleView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18, 
        getResources().getDisplayMetrics()));

Я также попытался использовать формулу следующим образом:

(int) getResources().getDisplayMetrics().scaledDensity * 18

Вкл. эмулятор, я получаю правильный размер текста, поэтому я не уверен, как воспроизвести это. Если кому-то это удастся, оставьте комментарии для меня и других, чтобы понять, что на самом деле не так. Спасибо

1 Ответ

0 голосов
/ 23 февраля 2020

Итак, я открыл Исходный код TextView и обнаружил, что TextView.setTextSize принимает sp, а не px. Таким образом, ответ заключается не в том, чтобы преобразовать sp в px, а в том, чтобы использовать sp по умолчанию, или, если вам нужно поддерживать несколько единиц размера, используйте setTextSize (int unit, float size)

...