Как установить размер текста в зависимости от размеров экрана? - PullRequest
1 голос
/ 24 сентября 2019

Мне нужно установить весь текстовый контент приложения в зависимости от размеров экрана.Я имею в виду кнопки, текстовые представления и т. Д. Например, если я запускаю приложение на планшете Pixel C, размер текста кнопок и текстовый вид текста должен быть очень большим и очень маленьким в устройстве 320x240.

Сначала я попробовал autoSizeTextType, но, наконец, я отказался от этого подхода, потому что его можно применять только к TextView, а не к кнопкам и т. Д. *

После этого я попробовал этот подход: https://developer.android.com/training/multiscreen/screendensities создание4 папки в папке res:

values-hdpi
values-mdpi
values-xhdpi
values-xxhdpi

И внутри них файл dimens.xml со значениями размера текста, например, это файл внутри папки values-xhdpi:

<resources>
    <dimen name="big_text">35sp</dimen>
    <dimen name="medium_text">25sp</dimen>
    <dimen name="small_text">20sp</dimen>
</resources>

А для других папок я ставлю разные значения для проверки.

Это работает ... но ... это не поведение, которое я ищу.Почему?Поскольку я выполнял приложение в двух разных эмуляторах xhdpi, Pixel C и Nexus 4. Pixel C имеет большее разрешение, но экран очень большой, поэтому оба устройства используют один и тот же файл dimens.xml, но кнопки и тексты отображаются.отображается маленьким в Pixel C и очень большим в Nexus 4, как вы можете видеть на этом рисунке:

enter image description here

Что нужно сделать, чтобы получить значение размера текстакоторая занимает одну и ту же часть экрана для фразы во всех устройствах?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

В Android 8.0 (уровень API 26) и выше вы можете указать TextView, чтобы позволить размеру текста автоматически расширяться или сокращаться, чтобы заполнить его макет на основе характеристик и границ TextView.Этот параметр облегчает оптимизацию размера текста на разных экранах с динамическим содержимым.

<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp" />

Для получения дополнительной информации см. Официальную документацию

0 голосов
/ 24 сентября 2019

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

Спецификатор наименьшая ширина - это «нормальный» способ различения экрана.размеры.«Наименьшая ширина» дает вам гарантии относительно размера устройства независимо от его текущей ориентации.

values/           <-- fallback for everything else
values-sw400dp/   <-- modern "large" phones
values-sw600dp/   <-- 7" tablets
values-sw720dp/   <-- 10" tablets

Спецификатор доступная ширина , с другой стороны, дает вам гарантии относительно размераустройства для текущей ориентации.То есть телефон в портретной ориентации будет иметь гораздо меньшую доступную ширину, чем телефон в альбомной ориентации (тогда как он будет иметь одинаковое значение наименьшая ширина для портретной / альбомной ориентации).

values/          <-- fallback for everything else
values-w400dp/   <-- any device that currently has 400dp or more available width
values-w600dp/   <-- 600dp or more available width
values-w720dp/   <-- 720dp or more available width

Опять же, реальный вопрос заключается в том, хотите ли вы использовать одинаковые размеры текста для разных ориентаций.Если да, используйте наименьшая ширина .Если нет (вам нужны разные размеры для разных ориентаций), используйте доступную ширину .

...