2010-01-04 27 views
11

Ui düzenimi başlatmak için tuttumda düzen düzenleyicisini kullandım ve sonra kodu dinamik olarak doldurmak için oluşturdum ve işler farklı boyutlarda görünüyor. Ben yıldız görüntüleri eklemek için kullanın XML şöyle görünür:Piksellerle ölçeklenen pikseller arasındaki ilişki nedir?

<ImageView 
android:src="@drawable/star_gold" 
android:layout_height="22sp" 
android:layout_width="22sp" 
android:adjustViewBounds="true" 
android:layout_marginLeft="2sp" 
android:layout_marginRight="2sp" /> 

ve ben aynı şeyi yapmak için kullanabilirsiniz Java kodu şuna benzer:

ViewGroup.MarginLayoutParams layout = new ViewGroup.MarginLayoutParams(22, 22); 
layout.setMargins(2, 0, 2, 0); 
ImageView star = new ImageView(mContext); 
star.setImageResource(R.drawable.star_gold); 
star.setLayoutParams(layout); 
star.setAdjustViewBounds(true); 
holder.Stars.addView(star); 

Ben G1 benim uygulamanın çalışma her şey yolunda ve iyi görünüyor, ama Droid üzerinde çalıştırdığımda, Java ile eklediğim yıldızlar XML'ime eklediklerimin yaklaşık yarısı kadar. Her şeyin uygun şekilde ölçeklendiğinden emin olmak için ne yapmam gerekir?

Düzeltme: Bunlar büyük yanıtlar, ancak koddan nasıl yapılacağını bilmem gerekiyor. Boyutu ayarladığımda, ham pikselde, boyutu dipte ayarlamanın herhangi bir yolu var mı?

+11

Ölçekli piksel kaldırıldı balık derisi dokusunu oldu Genellikle, mekanik aşınma yoluyla. –

+0

@Adam Davis lol – CaseyB

cevap

7

İşte başlıyoruz!DisplayMetrics Yoğunluğunu almam gerekiyor.

// Convert the dips to pixels 
final float scale = getContext().getResources().getDisplayMetrics().density; 
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f); 

Doğru yönde bana işaret ettiğiniz için hepinize teşekkür ederim! Java

6

belgelerden;:

da bu söz konusu dp ve sp bazı iyi bilgi bulacağınız bu gibi

Ölçek bağımsız Piksel (sp) dp birimi, ancak kullanıcının yazı tipi boyutu tercihi tarafından ölçeklenen da. bu birimi, yazı tipi boyutlarını belirtirken kullanmanız önerilir, böylece ekran yoğunluğu ve kullanıcı tercihi için ayarlanır.

Bu yazı boyutlandırma için kullanmak istediğiniz gibi geliyor, ama marj/dolgu gibi şeyler için daldırma kullanırsınız:

Yoğunluk bağımsız piksel (dip) uygulamaları A sanal piksel birimi UI'lerini tanımlamak için ekspres mizanpaj boyutlarını veya pozisyonunu yoğunluktan bağımsız bir şekilde kullanabilirsiniz.

18

Öncelikle, kullandığınız edilmelidir Yoğunluk Bağımsız Piksel - dip veya dp - değil Pikseller'i Ölçekli - sp.

Yoğunluktan bağımsız piksel, 160 dpi ekranda bir fiziksel piksele eşdeğerdir. Kaynaklarınız dip boyutundaysa, farklı yoğunluklarda ekranlarda otomatik olarak ölçeklenirler; Bu nedenle, XML'inizde belirtilen yıldızlar iyi görünür. Ölçeklendirilmiş Pikseller benzerdir, ancak metin ölçekleme seçeneklerini de yansıttığı için yalnızca metin kaynakları için kullanılmalıdır.

Sorununuz, Java kodunuzun ölçeklenmemiş ham piksellerde çalıştığı ve bu nedenle yıldızlarınızın daha küçük göründüğü anlamına gelir. Android belgelerinde instructions on how to convert from dips to pixels vardır. Kısacası, android.util.DisplayMetrics.density field'a bakmanız gerekiyor.

6

dips metin boyutunu ayarlamak nasıl orijinal soruya geri dönersek veya ölçekli piksel:

text.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12f); 

VEYA

text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12f); 
İlgili konular