Android не увеличивает текст в приложении при изменении размера шрифта устройства

#android #font-size

#Android #размер шрифта

Вопрос:

У меня есть приложение для Android, в котором я использую список элементов, например, слева у меня есть миниатюра, а справа от нее — текст.

Все работает нормально, но я заметил проблему, когда пользователь увеличивает размер шрифта для своего устройства (не в приложении, а в целом для своего устройства, поскольку он пожилой человек, ему нужны буквы большего размера). Поскольку каждое мобильное устройство имеет в настройках возможность изменять размер шрифта — маленький. средний, большой, очень большой и т.д.)

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

Обычно я использую размер текста в SP (например, 16sp):

 <TextView
    android:id="@ id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="16sp"
</TextView>
  

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

Теперь, если кому-то нужно иметь большие шрифты на своем устройстве, он не сможет нормально использовать приложение.

Ответ №1:

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

Комментарии:

1. спасибо, я только что протестировал его, кажется, работает нормально. Однако Android studio предлагает использовать SP вместо DP, но я могу с этим смириться

2. ответ @Darksymphony Saniya правильный, использование DPS сохранит тот же масштабированный размер. Однако, как вы видели, Android Studio будет жаловаться, потому что это противоречит правилам доступности. Если пользователь увеличивает размер системного текста, обычно это происходит из-за того, что он не может правильно видеть (плохое зрение), поэтому использование DPs вместо SPs ставит ваш собственный эстетический выбор выше того, что действительно нужно пользователю, что является плохим выбором дизайна.

Ответ №2:

Вы можете переопределить базовую активность

 override fun attachBaseContext(newBase: Context?) {
    super.attachBaseContext(newBase)
    val config = Configuration(newBase?.resources?.configuration)
    config.fontScale = 1.0f
    applyOverrideConfiguration(config)
}
  

Java:

 @Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    Configuration config = new Configuration(newBase.getResources().getConfiguration());
    config.fontScale = 1.0f;
    applyOverrideConfiguration(config);
}
  

Комментарии:

1. и, возможно, на Java, а не на kotlin, пожалуйста? Неплохая идея