Я хочу вказати власний розмір тексту у своїй програмі, але у мене виникають проблеми з цим.
Коли я змінюю розмір шрифту в налаштуваннях пристрою, розмір шрифту моєї програми TextView
також змінюється.
Я хочу вказати власний розмір тексту у своїй програмі, але у мене виникають проблеми з цим.
Коли я змінюю розмір шрифту в налаштуваннях пристрою, розмір шрифту моєї програми TextView
також змінюється.
Відповіді:
Насправді розмір шрифту Налаштування впливає лише на розміри в sp
. Так що все , що потрібно зробити - визначити textSize
в dp
замістьsp
, то настройки не змінить розмір тексту в вашому додатку.
Ось посилання на документацію: Розміри
Однак зауважте, що очікувана поведінка полягає в тому, що шрифти в усіх додатках відповідають параметрам користувача. Є багато причин, за якими користувач може захотіти коригувати розміри шрифту, а деякі з них можуть бути навіть медичними особами з вадами зору. Використання тексту dp
замість sp
тексту може призвести до небажаної дискримінації деяких користувачів вашого додатка.
тобто:
android:textSize="32dp"
sp
і коли я повинен використовувати dp
. Я отримав дуже хорошу відповідь тут: stackoverflow.com/questions/11638691 / ...
Найпростіше зробити це просто скористатися чимось подібним:
android:textSize="32sp"
Якщо ви хочете дізнатися більше про textSize
об’єкт, ви можете перевірити документацію для розробників Android .
Використовуйте 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"/>
Ви можете оголосити різні dimens.xml
файли для різних типів екранів. Це дозволить гарантувати бажаний вигляд вашої програми на різних пристроях.
Якщо ви не вказуєте, android:textSize
система використовує значення за замовчуванням.
Не годиться знову вказувати DIP або SP за кодом, коли це вже визначено у файлі dimen.xml.
Я думаю, що найкращим варіантом є використання PX при використанні значення dimen.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());
}
це може допомогти. додайте код у свою власну програму або 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;
}
однак, Resource # updateConfiguration відображено на рівні 25 API, це означає, що він буде непідтримуваний якийсь день у майбутньому.
Ви можете використовувати цей код:
android:textSize="32dp"
це вирішує вашу проблему, але ви повинні знати, що ви повинні поважати рішення користувачів. цим зміною розміру тексту з налаштувань пристрою це значення не змінить. так що тому вам потрібно використовувати sp замість dp . Тому я пропоную переглянути ваш додаток з різними розмірами шрифту системи (маленький, звичайний, великий, ...)
для kotlin, це працює для мене
priceTextView.textSize = 12f
Якщо використовувані одиниці - це SP, а не DP, і ви хочете змінити масштаб шрифту системи, все, що ви робите, - це замінити один метод діяльності - дивіться цю публікацію .
resource.updateConfiguration застаріло і баггі (у Oreo у мене виникли проблеми із форматованим текстом).
в android 8 це рішення працює для мене
додати цей код до базової активності
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}