Размер шрифта TextView в приложении Android изменяется при изменении размера шрифта из собственных настроек

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

Когда я изменяю размер шрифта в настройках устройства, размер шрифта моего приложенияTextView также меняется.

 live-love22 нояб. 2017 г., 19:46
Используйте sp для размера текста ...потому что, но это масштабируется пользователемs размер шрифта. Используйте дп для всего остального.
 Bhavesh Jethani16 июл. 2014 г., 08:47
Вы можете найти ответ здесьstackoverflow.com/questions/16706076/...
 iDroid Explorer07 нояб. 2012 г., 08:16
это поведение по умолчанию, если вы изменяете размер шрифта собственного шрифта устройства, это также влияет на размер шрифта вашего приложения.

Ответы на вопрос(11)

DPs вместоSPs вtextSize решает это.

Вы должны написать в тегах TextView в XML:

android:textSize="32dp"

textView.setTextSize(X) интерпретирует число (X) как SP. использованиеsetTextSize(TypedValue.COMPLEX_UNIT_DIP, X) установить значения вдр.

если он уже определен в файле измерения .xml.

Я думаю, что лучшим вариантом является использование PX при использовании значения измерения .xml:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));

Таким образом, вы можете переключаться с DP на SP, если это необходимо, в файле измерения.xml без необходимости изменения какого-либо кода.

стемного шрифта - обновить конфигурацию, используя базовое действие.

//in base activity add this code.
public  void adjustFontScale( Configuration configuration) {

    configuration.fontScale = (float) 1.0;
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.getDefaultDisplay().getMetrics(metrics);
    metrics.scaledDensity = configuration.fontScale * metrics.density;
    getBaseContext().getResources().updateConfiguration(configuration, metrics);

}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    adjustFontScale( getResources().getConfiguration());
}
Решение Вопроса

sp, Так что все, что Вам нужно сделать - определитьtextSize вdp вместоspтогда настройки победилиизменить размер текста в вашем приложении.

Вот'Ссылка на документацию:Размеры

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

то есть:

android:textSize="32dp"
 Sam25 сент. 2015 г., 11:20
Давным-давно я хотел знать, есть ли какое-либо правило, когда я должен использоватьsp и когда я должен использоватьdp, Я получил действительно хороший ответ здесь:stackoverflow.com/questions/11638691/...

Вы можете использовать этот код:

android:textSize="32dp"

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

aseActivity

/**
 * 重写 getResource 方法,防止系统字体影响
 *
 * @return
 */
@Override
public Resources getResources() {
    Resources resources = super.getResources();
    if (resources != null && resources.getConfiguration().fontScale != 1) {
        Configuration configuration = resources.getConfiguration();
        configuration.fontScale = 1;
        resources.updateConfiguration(configuration, resources.getDisplayMetrics());
    }
    return resources;
}

однако Resource # updateConfiguration удален на уровне API 25, что означает, что когда-нибудь в будущем он не будет поддерживаться.

dimension тип ресурсов, которые вы используетеstring Ресурсы (DOCS).

В вашемdimens.xml файл, объявите переменные измерения:

<!--?xml version="1.0" encoding="utf-8"?-->
<resources>
  <dimen name="textview_height">25dp</dimen>
  <dimen name="textview_width">150dp</dimen>
  <dimen name="ball_radius">30dp</dimen>
  <dimen name="font_size">16sp</dimen>
</resources>

Затем вы можете использовать эти значения следующим образом:

<textview android:layout_height="@dimen/textview_height" android:layout_width="@dimen/textview_width" android:textsize="@dimen/font_size">
</textview>

Вы можете объявить разныеdimens.xml файлы для разных типов экранов. Это гарантирует желаемый внешний вид вашего приложения на разных устройствах.

Когда ты нет указатьandroid:textSize система использует значения по умолчанию.

 Himanshu Virmani21 июн. 2013 г., 11:36
проблема не в экранах. Это собственный размер шрифта, выбранный в настройках дисплея Android, что приводит к упомянутой проблеме

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

resources.updateConfiguration устарел и глючит (на Oreo у меня были проблемы с форматированным текстом).

о:

android:textSize="32sp"

Если ты'хотелось бы узнать больше оtextSize собственности, вы можете проверитьДокументация для разработчиков Android.

 Boy23 авг. 2015 г., 13:16
это на самом деле, почему TS имеет проблему, используязр» вместо 'дп»
 Phan Van Linh28 февр. 2017 г., 05:04
Я до сих пор неНе знаю, почему 100 голосов. потому что, если мы используем sp для установки textize в приложении. Затем мы меняем размер шрифта в Setting, также меняем TextView в приложении

Ваш ответ на вопрос