Saya ingin menentukan ukuran teks saya sendiri di aplikasi saya, tetapi saya mengalami masalah melakukan ini.
Ketika saya mengubah ukuran font di pengaturan perangkat, ukuran font aplikasi saya TextView
juga berubah.
Saya ingin menentukan ukuran teks saya sendiri di aplikasi saya, tetapi saya mengalami masalah melakukan ini.
Ketika saya mengubah ukuran font di pengaturan perangkat, ukuran font aplikasi saya TextView
juga berubah.
Jawaban:
Sebenarnya, ukuran font Pengaturan hanya memengaruhi ukuran dalam sp
. Jadi semua Anda perlu melakukan - menentukan textSize
di dp
bukan sp
, maka pengaturan tidak akan mengubah ukuran teks dalam aplikasi Anda.
Berikut tautan ke dokumentasi: Dimensi
Namun harap dicatat bahwa perilaku yang diharapkan adalah font di semua aplikasi menghormati preferensi pengguna. Ada banyak alasan seorang pengguna mungkin ingin menyesuaikan ukuran font dan beberapa dari mereka bahkan mungkin pengguna yang tunanetra. Menggunakan dp
alih-alih sp
untuk teks dapat menyebabkan diskriminasi dengan enggan terhadap beberapa pengguna aplikasi Anda.
yaitu:
android:textSize="32dp"
sp
dan kapan saya harus menggunakannya dp
. Saya mendapat respons yang sangat baik di sini: stackoverflow.com/questions/11638691/…
Cara termudah untuk melakukannya adalah dengan menggunakan sesuatu seperti berikut:
android:textSize="32sp"
Jika Anda ingin tahu lebih banyak tentang textSize
properti ini, Anda dapat memeriksa dokumentasi pengembang Android .
Gunakan dimension
jenis sumber daya seperti Anda menggunakan string
sumber daya ( DOCS ).
Di dimens.xml
file Anda , deklarasikan variabel dimensi Anda:
<?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>
Kemudian Anda dapat menggunakan nilai-nilai ini seperti ini:
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
Anda dapat mendeklarasikan dimens.xml
file yang berbeda untuk berbagai jenis layar. Melakukan hal ini akan menjamin tampilan aplikasi yang Anda inginkan pada perangkat yang berbeda.
Ketika Anda tidak menentukan android:textSize
sistem menggunakan nilai default.
Ini bukan hal yang baik untuk menentukan DIP atau SP lagi dengan kode ketika sudah didefinisikan dalam file dimen.xml.
Saya pikir pilihan terbaik adalah menggunakan PX saat menggunakan nilai dimen.xml:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
Dengan cara ini, Anda dapat beralih dari DP ke SP jika diperlukan dalam file dimen.xml tanpa harus mengubah kode apa pun.
cara sederhana untuk mencegah seluruh aplikasi tidak terpengaruh oleh ukuran font sistem adalah memperbarui Konfigurasi menggunakan aktivitas dasar.
//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());
}
ini bisa membantu. tambahkan kode di Aplikasi kustom Anda atau 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;
}
namun, Resource # updateConfiguration dideplicasikan di API level 25, yang artinya akan tidak didukung suatu hari di masa mendatang.
Anda dapat menggunakan kode ini:
android:textSize="32dp"
itu memecahkan masalah Anda tetapi Anda harus tahu bahwa Anda harus menghormati keputusan pengguna. dengan ini, mengubah ukuran teks dari pengaturan perangkat tidak akan mengubah nilai ini. jadi itu sebabnya Anda harus menggunakan sp bukan dp . Jadi saran saya adalah meninjau aplikasi Anda dengan ukuran font sistem yang berbeda (kecil, normal, besar, ...)
untuk kotlin, itu bekerja untukku
priceTextView.textSize = 12f
Jika unit yang digunakan adalah SP, bukan DP, dan Anda ingin mengganti penskalaan font sistem, yang Anda lakukan hanyalah mengganti satu metode dalam aktivitas - lihat posting ini .
resource.updateConfiguration sudah usang dan buggy (di Oreo saya punya masalah dengan teks yang diformat).
di android 8 solusi ini berfungsi untuk saya
tambahkan kode ini dalam aktivitas dasar
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}