2010-01-04 105 views
11

我在eclipse中使用了佈局編輯器來模擬我的UI佈局,然後創建了動態填充它的代碼,並且事物顯示爲不同的大小。我用添加星圖的XML看起來是這樣的:像素和縮放像素之間的關係是什麼

<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" /> 

我用做同樣的事情在Java代碼如下所示:

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); 

當我在G1上運行我的應用程序一切排隊並看起來很好,但是當我在Droid上運行它時,通過Java添加的星星大約是我在XML中添加的星星的一半。我需要做些什麼來確保一切都適當地擴展?

編輯: 這些都是很好的迴應,但我需要知道如何從代碼做到這一點。當我將它的大小設置爲原始像素時,是否有任何方法在dip中設置大小?

+11

縮放的像素有魚,皮膚紋理從刪除他們通常通過機械磨損。 – 2010-01-04 17:26:01

+0

@亞當戴維斯哈哈 – CaseyB 2010-01-04 17:33:51

回答

7

這裏我們開始吧!我需要獲得DisplayMetrics密度。

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

謝謝大家指點我正確的方向!在Java中

6

從文檔:

規模無關的像素(SP)這是像dp單位,但它也是 縮放的用戶的字體大小 的首選項。建議您在指定字體大小時使用 本機, 因此將針對 屏幕密度和用戶偏好進行調整。

這聽起來像你想使用的字體大小的東西,但我會用浸喜歡的事情保證金/填充:

密度獨立像素(DIP)一 虛擬像素單元應用程序 可以用於定義他們的UI,以 表示佈局尺寸或以密度無關的方式定位 。

18

首先,你應該使用密度無關的像素 - dipdp - 而不是縮放的像素 - sp

與密度無關的像素相當於160 dpi屏幕上的一個物理像素。如果您的資源尺寸爲dip,它們將自動縮放到不同密度的屏幕上;這就是爲什麼您的XML中指定的星星看起來沒問題。縮放像素相似,但只能用於文本資源,因爲它們也反映文本縮放選項。

你的問題是你的Java代碼工作在未縮放的原始像素,這就是爲什麼你的星星看起來更小。 Android文檔有instructions on how to convert from dips to pixels。總之,你需要看看android.util.DisplayMetrics.density field

6

再回到你怎麼設置逢低文字大小的原題或縮放的像素:

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

OR

text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12f); 
相關問題