Dapatkan dimensi dari XML dan setel ukuran teks pada waktu proses

101

Di dimens.xml, saya memiliki:

<dimen name="text_medium">18sp</dimen>

Dalam runtime, saya mendapatkan nilai ini dan mengatur ukuran teks tampilan teks:

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

Pada tablet 10 (1280 x 800), semuanya baik-baik saja; tetapi pada telepon (800 x 480), tampilan teks memiliki font yang sangat besar. Di tablet, ukurannya sama dengan 18; di telepon, itu 27.

Jika saya mengatur ukuran secara manual dengan:

textView.setTextSize(size)

ukurannya normal di kedua perangkat.

Yura Shinkarev
sumber

Jawaban:

297
<dimen name="text_medium">18sp</dimen>

Atur ukuran dalam kode:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));
Kostek Polandia
sumber
7
Saya tidak tahu tentang OP, tetapi ini adalah jawaban yang saya cari. Saya menggunakan COMPLEX_UNIT_DP berpikir saya perlu menentukan jenis masukan dan bukan jenis keluaran.
HenryAdamsJr
ketika saya mendapatkan ukuran font saya (didefinisikan dalam sp) saya mendapatkan 60. Ketika saya mengaturnya kembali dengan OMPLEX_UNIT_PX dan mengambilnya kembali saya mendapatkan 70. Sepertinya tidak semuanya jelas di sini
Gleichmut
2
Untuk ukuran teks, mengapa saya tidak bisa menggunakan TypedValue.COMPLEX_UNIT_SP?
dphans
3
@dphans Resources.getDimension()Metode mengembalikan nilai yang sudah dikalikan dengan metrik yang sesuai
pkuszewski
2
@pkuszewski Wow, itu sangat membingungkan.
Big_Chair
4

Kedua metode getDimensionPixelSize () dan getDimension () menggunakan kepadatan layar untuk menghitung piksel. Kepadatan layar ponsel Anda jelas hdpi (240dpi) sehingga menggunakan skala 1,5 untuk mengubah dp ke sp. Matematika sederhana 18 * 1,5 = 27.

Tampaknya kepadatan tablet Anda adalah mdpi (160dpi) sehingga skalanya hanya 1: 1.

Tetapi jika Anda membandingkan ukuran sebenarnya dari kedua teks, itu harus sama.

Cara terbaik adalah membuat dua file dimens.xml satu di folder nilai untuk ponsel, dan satu lagi di values-sw600dp untuk tablet (Anda juga bisa menggunakan folder values-sw720dp untuk menyimpan dimensi untuk tablet 10 inci dalam orientasi lanskap).

Anda dapat membaca lebih lanjut tentang dimensi di Android di: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/

Android4Pemula
sumber
1

Anda dapat menggunakan sdp (Scalable desnsity pixels) https://github.com/intuit/sdp sebagai pengganti dp, ini pasti akan menyelamatkan hidup Anda

Aayushman chaudhory
sumber