Размер текста не зависит от изменения размера шрифта

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

  1. в этом случае используются единицы измерения sp, но можно ли изменить его с помощью кода на dp? На это не повлияет изменение размера шрифта, верно?

  2. Я знаю, что могу использовать float f = getResources().getConfiguration().fontScale;, чтобы получить размер системного шрифта, а затем использовать if-else до .setTextSize() в зависимости от разрешения экрана и размера шрифта, но я также нашел этот фрагмент кода

Configuration mConfiguration = new Configuration(); mConfiguration.fontScale = 1; getResources().getConfiguration().setTo(mConfiguration);

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


person Nemanja    schedule 03.10.2018    source источник


Ответы (2)


Самый простой способ - использовать dp вместо sp, как вы сказали.

Предостережение заключается в том, что если они изменят масштаб экрана, это изменит масштаб того, что означает dp, так же, как изменение размера шрифта изменяет масштаб того, что означает sp.

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

Например, вместо того, чтобы делать TextView высотой 25 dp, попробуйте сделать его wrap-content.

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

person Davak72    schedule 03.10.2018

Вы НЕ должны этого делать. Если пользователь изменяет глобальный размер, это происходит потому, что ему трудно что-то видеть. У них физическая инвалидность, и они пытаются ее компенсировать. Вы не должны пытаться отвергнуть их выбор. Это не только дурацкая работа, но и означает, что им вообще будет сложно использовать ваше приложение. Это все равно, что пытаться остановить слепого человека от преобразования текста в речь в вашем приложении, потому что у вас действительно классная фоновая музыка. Или избавиться от пандуса для инвалидов, потому что у вас хорошая лестница.

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

person Gabe Sechan    schedule 03.10.2018
comment
:) Мое приложение использует пустые изображения номерного знака и добавляет номерной знак поверх него, и он занимает всю ширину экрана. Высота текста примерно 20% от высоты экрана. Размер текста уже довольно большой, но один пользователь сообщил мне, что он использует полное разрешение 1440x2880, поэтому он изменил размер системного шрифта, чтобы он мог видеть текст (не в моем приложении). И это делает мой большой размер текста ОГРОМНЫМ, и он плохо отображается на LP-изображении. Это не имеет ничего общего с доступностью. Он не будет уменьшать размер только тогда, когда использует мое приложение. - person Nemanja; 03.10.2018
comment
Так что это не резкий ход, а (в данном случае) практический. Вот почему я спросил, можно ли это сделать с одним переопределением вместо использования большого switch или if-else, потому что в любом случае я делаю стандартный размер текста для всех размеров ›нормальным. - person Nemanja; 03.10.2018
comment
Также мне не нравится, как вы пришли к выводу о причинах, по которым я хочу заблокировать размер шрифта и проголосовать за это. И ваш ответ не имеет ничего общего с ответом на вопрос, кроме как судить о том, что вы явно ошиблись. - person Nemanja; 04.10.2018
comment
И в любом случае это не то, что тебе следует делать. Потому что, если вы отбросите его глобально, как вы просили, это повлияет на каждую строку в приложении. Если это буквально ваша единственная строка, вы навредите опыту в другом месте. - person Gabe Sechan; 04.10.2018