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



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



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

573   10  

10 ответов:

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

вот ссылка на документацию: размеры

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

Я.е:

android:textSize="32dp"

проще всего сделать это просто использовать что-то вроде следующего:

android:textSize="32sp"

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

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

в своем dimens.xml file, объявите ваши переменные измерения:

<?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"
        />

используя размер шрифта в ДПС вместо SPs на textSize решает эту.

это может помочь. добавьте код в пользовательское приложение или 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, что означает, что он не будет поддерживаться в будущем.

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

android:textSize="32dp"

Comments

    Ничего не найдено.