Размер шрифта TextView в приложении Android изменяется при изменении размера шрифта из собственных настроек
Я хочу указать свой собственный размер текста в моем приложении, но у меня возникли проблемы с этим.
когда я изменяю размер шрифта в настройках устройства, размер шрифта моего приложения TextView также изменяется.
10 ответов:
на самом деле, настройки размера шрифта влияет только на размеры в
sp. Так что все, что вам нужно сделать - определитьtextSizeнаdpвместоsp, то настройки не изменят размер текста в вашем приложении.вот ссылка на документацию: размеры
однако обратите внимание, что ожидаемое поведение заключается в том, что шрифты во всех приложениях уважают предпочтения пользователя. Есть много причин, по которым пользователь может регулировать размер шрифта и некоторые из них могут даже быть медицинские - слабовидящие пользователи. Используя
dpвместоspдля текста может привести к нежелательной дискриминации в отношении некоторых пользователей вашего приложения.Я.е:
android:textSize="32dp"
проще всего сделать это просто использовать что-то вроде следующего:
android:textSize="32sp"Если вы хотите узнать больше о
textSizeсвойство, вы можете проверить документация для разработчиков Android.
использовать
dimensionтип ресурсов, как вы используетеstringресурсы ( DOCS).в своем
dimens.xmlfile, объявите ваши переменные измерения:<?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"/>вы можете объявить разные
dimens.xmlфайлы для различных типов экранов. Это гарантирует желаемый внешний вид вашего приложения на разных устройствах.когда вы не указываете
android:textSizeсистема использует значение по умолчанию.
также обратите внимание, что если textSize установлен в коде, вызов
textView.setTextSize(X)интерпретирует число (X) как SP. ИспользуйтеsetTextSize(TypedValue.COMPLEX_UNIT_DIP, X)для установки значения в dp.
Это не хорошая вещь, чтобы иметь, чтобы повторно указать дип или СП по коду, когда уже определены размеры.XML-файл.
Я думаю, что лучший вариант-использовать PX при использовании dimen.значение xml:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));таким образом, вы можете переключиться с DP на SP, если это необходимо в dimen.xml-файл без необходимости изменять какой-либо код.
простой способ предотвратить все приложение от получения эффекта от размера шрифта системы является updateConfiguration с помощью базовой деятельности.
//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()); }
это код создания textview с атрибутом размера текста.
<TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="2018 Sampath Bank PLC.All Rights Reserved." android:gravity="center" android:textColor="@android:color/darker_gray" android:textSize="14dp" android:layout_marginTop="26dp" />
это может помочь. добавьте код в пользовательское приложение или BaseActivity
/** * 重写 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; }однако ресурс#updateConfiguration исчерпан на уровне API 25, что означает, что он не будет поддерживаться в будущем.
Comments