XML'den boyut alın ve çalışma zamanında metin boyutunu ayarlayın


101

Dimens.xml'de şunlara sahibim:

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

Çalışma zamanında, bu değeri alıyorum ve bir metin görünümünün metin boyutunu ayarlıyorum:

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

10 inçlik bir tablette (1280 x 800) her şey yolunda; ancak bir telefonda (800 x 480), metin görünümünün çok büyük bir yazı tipi vardır. Tablette boyut 18'e eşittir; telefonda 27.

Boyutu manuel olarak ayarlarsam:

textView.setTextSize(size)

her iki cihazda da boyut normaldir.

Yanıtlar:


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

Kodda boyutu ayarlayın:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
OP hakkında bir bilgim yok ama aradığım cevap buydu. Çıktı türünü değil girdi türünü belirtmem gerektiğini düşünerek COMPLEX_UNIT_DP kullanıyordum.
HenryAdamsJr

yazı tipi boyutumu elde ettiğimde (sp'de tanımlı) 60 alıyorum. OMPLEX_UNIT_PX ile geri ayarladığımda ve tekrar geri aldığımda 70
alıyorum.

2
Metin boyutu için TypedValue.COMPLEX_UNIT_SPbunun yerine neden kullanamıyorum ?
dphans

3
@dphans Resources.getDimension()Yöntem, zaten uygun metrikle çarpılan değeri döndürür
pkuszewski

2
@pkuszewski Vay canına, bu çok kafa karıştırıcı.
Big_Chair

4

Her iki yöntem de getDimensionPixelSize () ve getDimension () pikselleri hesaplamak için ekran yoğunluğunu kullanır. Telefonunuzun ekran yoğunluğu açıkça hdpi'dir (240dpi), bu nedenle dp'yi sp'ye dönüştürmek için 1.5 ölçek kullanır. Basit matematik 18 * 1.5 = 27.

Görünüşe göre tablet yoğunluğunuz mdpi (160dpi), yani ölçek sadece 1: 1.

Ancak her iki metnin gerçek boyutunu karşılaştırırsanız, aynı olması gerekir.

En iyi yol, biri telefon için değerler klasöründe ve diğeri tabletler için değerler-sw600dp'de iki dimens.xml dosyası oluşturmaktır (10 inçlik tabletlerin boyutlarını yatay yönde saklamak için de values-sw720dp-land klasörünü kullanabilirsiniz).

Android'deki boyutlar hakkında daha fazla bilgiyi şu adresten okuyabilirsiniz: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.