Jika saya menetapkan nilai integer untuk mengubah ukuran teks tertentu dari TextView
menggunakan kode java, nilai ditafsirkan sebagai pixel ( px
).
Sekarang adakah yang tahu cara menugaskannya sp
?
Jika saya menetapkan nilai integer untuk mengubah ukuran teks tertentu dari TextView
menggunakan kode java, nilai ditafsirkan sebagai pixel ( px
).
Sekarang adakah yang tahu cara menugaskannya sp
?
Jawaban:
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Contoh:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Mendapatkan ukuran teks Anda dengan cara ini sudah akan mengonversi SP ke PX, dengan mempertimbangkan kepadatan layar dan faktor skala teks dalam akun.
Anda dapat menggunakan DisplayMetrics
objek untuk membantu mengonversi antara piksel dan piksel berskala dengan scaledDensity
atribut .
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
may be adjusted in smaller increments at runtime based on a user preference for the font size
bahwa ukuran font akan diperhitungkan.
Pendekatan yang lebih bersih dan lebih dapat digunakan kembali adalah
tentukan ukuran teks dalam dimens.xml
file di dalam res/values/
direktori:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
dan kemudian menerapkannya pada TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
Berdasarkan pada kode sumber setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
Saya membangun fungsi ini untuk menghitung demension ke piksel:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
Di mana unit adalah sesuatu seperti TypedValue.COMPLEX_UNIT_SP
.
Secara default setTextSize, tanpa unit bekerja di SP (skala pixel)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
Terima kasih @John Leehey dan @PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
Masalahnya adalah jika Anda mendefinisikan R.dimen.desired_sp hingga 25 di dimen.xml Anda
Ketika jawaban yang diterima tidak berfungsi (misalnya ketika berhadapan dengan Paint), Anda dapat menggunakan:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
COMPLEX_UNIT_PX
Anda perlu membagi kepadatan.
Ini adalah kode untuk format konversi PX ke SP . 100% Bekerja
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
Setelah mencoba semua solusi dan tidak ada yang memberikan hasil yang dapat diterima (mungkin karena saya bekerja pada perangkat dengan font standar sangat besar), yang berikut ini berfungsi untuk saya (COMPLEX_UNIT_DIP = Device Independent Pixels):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
Dari Api level 1, Anda dapat menggunakan public void setTextSize (float size)
metode ini.
Dari dokumentasi:
Tetapkan ukuran teks default ke nilai yang diberikan, ditafsirkan sebagai unit "piksel berskala". Ukuran ini disesuaikan berdasarkan kepadatan saat ini dan preferensi ukuran font pengguna.
Parameter: ukuran -> float: Ukuran piksel yang diskalakan.
Jadi Anda dapat dengan mudah melakukan:
textView.setTextSize(12); // your size in sp