Настройка текста для размеров экрана - пример Google Nexus 5


Недавно я провел некоторое тестирование на ферме устройств AWS и был потрясен, обнаружив, что мои размеры текста не масштабируются должным образом.

В настоящее время у меня есть разные папки для моих размеров текста:

values
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="center_indentation">80dp</dimen>
<dimen name="poll_question_text_size">14dp</dimen>
<dimen name="margin_left">80dp</dimen>
<dimen name="margin_bottom">8dp</dimen>
<dimen name="radio_button_answer_text_size">12dp</dimen>
<dimen name="answer_label_text_size">6dp</dimen>
<dimen name="answer_value_label_text_size">8dp</dimen>
<dimen name="vote_count_label_text_size">11dp</dimen>

values-sw600dp
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="center_indentation">80dp</dimen>
<dimen name="poll_question_text_size">22dp</dimen>
<dimen name="margin_left">160dp</dimen>
<dimen name="radio_button_answer_text_size">14dp</dimen>
<dimen name="margin_bottom">16dp</dimen>
<dimen name="answer_label_text_size">9dp</dimen>
<dimen name="answer_value_label_text_size">10dp</dimen>
<dimen name="vote_count_label_text_size">13dp</dimen>

values-sw720dp
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="center_indentation">80dp</dimen>
<dimen name="poll_question_text_size">30dp</dimen>
<dimen name="margin_left">185dp</dimen>
<dimen name="margin_bottom">20dp</dimen>
<dimen name="radio_button_answer_text_size">18dp</dimen>
<dimen name="answer_label_text_size">10dp</dimen>
<dimen name="answer_value_label_text_size">12dp</dimen>
<dimen name="vote_count_label_text_size">14dp</dimen>

В каждой папке я создаю dimens.xml-файл, который я использовал для извлечения соответствующего размера текста для данного экрана.

Я зашел на сайт device metrics, расположенный здесь и обнаружил, что специально смотрел на Google Нексус 5. Похоже, что Nexus 5, после того как я запустил свой эмулятор, тянет из моей папки sw600dp. Я не уверен, почему, и он генерирует размер текста, который я надеюсь увидеть на 7-дюймовом планшете, а не на 4,5-дюймовом портативном устройстве.

Я прочитал бесчисленное количество сообщений на StackOverflow, но не могу найти никакого способа должным образом учитывать все устройства. Я понимаю, что они есть. 6", 7", 8", 9", и 10" устройств, и я хочу убедиться, что я учитываю каждый размер.

Вот как выглядел мой текст мой Google Nexus 5, Обратите внимание, что я имею в виду элемент radio_button_ansewr_text_size:

Введите описание изображения здесь

1 3

1 ответ:

При указании размера текста всегда используйте sp:

<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" />

Или

<dimen name="text_size">13sp</dimen>

Http://developer.android.com/training/multiscreen/screendensities.html

Если вам нужно задать размеры текста в коде java, сделайте это следующим образом:

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);