Тот же размер текста, но больше на других устройствах - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть TextView, в котором я программно устанавливаю размер текста в 'SP'.

tv.setTextSize(spToPx(5, context));

public static int spToPx(float sp, Context context) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}

Первый снимок экрана показывает, как он должен выглядеть (и как он выглядит на моих Xiaomi Redmi и Doogee HT7

First screenshot shows how it should look (and how it looks on my Xiaomi Redmi and Doogee HT7)

Второй снимок экрана показывает, как это выглядит на других устройствах с более высоким или тем же dpi.

Second screenshot shows how it looks on other devices with higher or the same dpi.

Обычно, если яправильно понимать, текст с одинаковым размером в 'dp' или 'sp' должен выглядеть одинаково на других устройствах (с тем же размером экрана), потому что он автоматически преобразует 'dp' или 'sp' в необходимое количество пикселей в зависимости от dpi.

После прочтения Руководства разработчика по Android об устройствах с различной плотностью я ожидал, что текст будет меньше, если я использую тот же размер текста на устройствах с более высоким разрешением, но теперь у меня есть ситуация, которой я действительно непонимать.

Ответы [ 5 ]

0 голосов
/ 20 мая 2019

Я все еще не нашел правильного объяснения этой проблемы.Единственная теория, которая у меня есть, следующая:

Существуют области плотности (120 точек на дюйм, 160 точек на дюйм, 240 точек на дюйм, 320 точек на дюйм, 480 точек на дюйм, 640 точек на дюйм).Плотность экрана вашего устройства будет определяться как ближайший сегмент.Например, если ваше устройство имеет 401 точек на дюйм, оно будет считаться 480 точек на дюйм.Поэтому, когда я создаю и добавляю вид размером 20 dp, он будет конвертирован в pixels больше, чем нужно.Это самое трудное для устройств, которые имеют плотность прямо между двумя ведрами.Я также проверил плотность всех устройств с неправильным отображением изображения (например, на image 2), и оно было почти правильным между двумя сегментами ...

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

0 голосов
/ 21 ноября 2018

Основное различие между sp и dp состоит в том, что sp сохраняет настройки шрифта пользователя.Пользователи, которые имеют более широкие настройки текста для обеспечения доступности, увидят, что размеры шрифтов соответствуют их настройкам размера текста.

, чтобы вы могли проверить настройки двух устройств и посмотреть, есть ли разница между ними.enter image description here

0 голосов
/ 21 ноября 2018

Если вы используете значения в sp, и пользователь меняет размер текста по умолчанию для своего устройства из Настройки ---> Показать ----> TextSize, ваши TextViews будут затронуты .С другой стороны, если вы используете dp значения, то независимо от того, какой размер текста пользователь установит по умолчанию, TextViews в вашем приложении останутся прежними.Google, конечно, не одобряет это как плохую практику, поскольку пользователь должен иметь возможность изменять размеры текста, но это будет именно то, что вы ищете.

Итак, используйте (TypedValue.COMPLEX_UNIT_DIP,number of your choosing) вместо (TypedValue.COMPLEX_UNIT_SP, sp)

0 голосов
/ 21 ноября 2018

Вы можете добавить файл измерений к вашим ресурсам.вот как я это делаю enter image description here

вот ссылка , где я получил ответ

0 голосов
/ 21 ноября 2018

Попробуйте, добавьте это свойство в ваш xml.Это изменит размер текста в зависимости от телефона.

style="@android:style/TextAppearance.DeviceDefault.Medium" /*for normal text */
style="@android:style/TextAppearance.DeviceDefault.Small" /*for small text */
style="@android:style/TextAppearance.DeviceDefault.Large" /*for large text */

Надеюсь, ваша проблема решится.

...