Bir TextView
java kodu kullanarak belirli bir metin boyutunu değiştirmek için bir tamsayı değeri atarsam, değer piksel ( px
) olarak yorumlanır .
Şimdi nasıl atanacağını bilen var sp
mı?
Bir TextView
java kodu kullanarak belirli bir metin boyutunu değiştirmek için bir tamsayı değeri atarsam, değer piksel ( px
) olarak yorumlanır .
Şimdi nasıl atanacağını bilen var sp
mı?
Yanıtlar:
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Misal:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Metin boyutunuzu bu şekilde almak, hem ekran yoğunluğunu hem de metin ölçeği faktörünü hesaba katarak SP'yi PX'e dönüştürecektir.
ÖznitelikleDisplayMetrics
pikseller ve ölçeklenmiş pikseller arasında dönüştürme işlemine yardımcı olması için bir nesne kullanabilirsiniz .scaledDensity
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
Yazı boyutunu böylece edecek hesaba katılmalıdır.
Daha temiz ve daha çok yeniden kullanılabilir yaklaşım
dizinin dimens.xml
içindeki dosyadaki metin boyutunu tanımlayın res/values/
:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
ve daha sonra aşağıdakilere uygulayın TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
Kaynak koduna göre 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()));
}
Ben piksel için herhangi bir demans hesaplamak için bu işlevi oluşturmak:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
Ünite böyle bir şey TypedValue.COMPLEX_UNIT_SP
.
Varsayılan olarak setTextSize, birimler SP olmadan çalışır (piksel ölçeği)
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.
John Leehey ve @PeterH'a teşekkürler:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
Şey, dimen.xml dosyasında R.dimen.desired_sp öğesini 25 olarak tanımlamanızdır
Kabul edilen cevap çalışmadığında (örneğin Paint ile çalışırken) şunları kullanabilirsiniz:
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
yoğunluğu bölmeniz gerekir.
Bu dönüştürme için kodudur PX için SP formatında. % 100 İşler
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
Tüm çözümleri denedikten ve kabul edilebilir sonuçlar vermedikten sonra (belki de varsayılan çok büyük yazı tiplerine sahip bir cihaz üzerinde çalıştığım için), aşağıdakiler benim için çalıştı (COMPLEX_UNIT_DIP = Cihazdan Bağımsız Piksel):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
Api düzey 1'den public void setTextSize (float size)
yöntemi kullanabilirsiniz .
Belgelerden:
Varsayılan metin boyutunu, "ölçeklenmiş piksel" birimleri olarak yorumlanan belirli bir değere ayarlayın. Bu boyut, geçerli yoğunluk ve kullanıcı yazı tipi boyutu tercihine göre ayarlanır.
Parametreler: size -> float: Ölçekli piksel boyutu.
Böylece şunları yapabilirsiniz:
textView.setTextSize(12); // your size in sp