2010-01-04 2 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" /> 

와 나는 같은 일을하는 데 사용하는 자바 코드는 다음과 같습니다

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에 추가하는 별의 크기의 절반 정도입니다. 모든 것이 적절하게 조정되는지 확인하려면 어떻게해야합니까?

편집 : 위의 답변은 훌륭하지만 코드에서 수행하는 방법을 알아야합니다. 크기를 원시 픽셀로 설정하면 딥의 크기를 설정할 수있는 방법이 있습니까?

+11

미늘 픽셀에서 제거하는 물고기 피부 결이 있었다 보통 기계적 마모를 통해 –

+0

@ Adam Davis lol – CaseyB

답변

7

여기 있습니다.DisplayMetrics Density를 얻어야합니다.

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

올바른 방향으로 나를 가리켜 주셔서 감사합니다. 자바

6

문서에서 :

또한이 질문에 DP와 SP에 대한 몇 가지 좋은 정보를 찾을 수 있습니다 이것이처럼

스케일 독립적 픽셀 (SP) dp 단위이지만, 도 사용자의 글꼴 크기 인 으로 조정됩니다. 글꼴 크기를 지정할 때 단위를 사용하는 것이 좋습니다 ( ). 화면 밀도와 사용자 취향에 맞게 조정됩니다.

그것은 당신이 글꼴 크기에 사용할 것 같은 소리,하지만 난 여백/패딩과 같은 것들을 위해 수영을 사용합니다 :

밀도 독립적 픽셀 (딥) 응용 프로그램 가상 픽셀 단위 UI를 정의 할 때 표현 레이아웃 치수 또는 위치에 밀도 독립적 인 방식으로 사용할 수 있습니다.

18

첫째, 당신이 사용되어야한다 밀도 독립적 픽셀 - dip 또는 dp -하지가 픽셀을 스케일 - sp.

밀도와 무관 한 픽셀은 160dpi 화면에서 하나의 물리적 픽셀과 동일합니다. 리소스가 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); 

또는

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