2010-01-04 3 views
11

je l'éditeur de mise en page Eclipse pour se moquer de ma mise en page ui, puis j'ai créé le code pour remplir dynamiquement et les choses comme montrant différentes tailles. Le XML que j'utilise pour ajouter les images star ressemble à ceci:Quelle est la relation entre les pixels et les pixels mis à l'échelle

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

et le code Java j'utiliser pour faire la même chose ressemble à ceci:

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

Quand je lance mon application sur le G1 Tout s'aligne et a l'air bien, mais quand je le lance sur le Droid, les étoiles que j'ajoute via Java sont environ la moitié de celles que j'ajoute dans mon XML. Que dois-je faire pour m'assurer que tout va bien?

Edit: Ce sont des réponses, mais je dois savoir comment le faire à partir du code. Lorsque je définis la taille en pixels bruts, y a-t-il un moyen de définir la taille en immersion?

+11

pixels Scaled ont cette texture peau de poisson prélevé eux, généralement par abrasion mécanique. –

+0

@Adam Davis lol – CaseyB

Répondre

7

Et voilà!J'ai besoin de la densité DisplayMetrics.

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

Merci à tous de m'avoir indiqué dans la bonne direction!

6

De la documentation:

Pixels indépendantes de l'échelle (sp) cela ressemble à la unité dp, mais il est également mis à l'échelle par la taille de police de l'utilisateur préférence. Il est vous recommandons d'utiliser cet appareil lors de la spécification des tailles de police, ils seront ajustés à la fois la densité de l'écran et préférences de l'utilisateur.

Cela ressemble à ce que vous voulez utiliser pour déterminer la taille de la police, mais j'utiliser dip pour des choses comme la marge/padding:

Densité pixel indépendante (DIP) Une unité de pixel virtuel que les applications peut utiliser dans la définition de leur interface utilisateur, à dimensions de mise en page express ou la position d'une manière indépendante de la densité.

18

Tout d'abord, vous devez utiliser Densité Pixels indépendants - dip ou dp - et pas redimensionné Pixels - sp.

Le pixel de densité indépendant est équivalent à un pixel physique sur un écran de 160 dpi. Si vos ressources sont dimensionnées en dip, elles seront automatiquement mises à l'échelle sur des écrans de densités différentes; C'est pourquoi les étoiles spécifiées dans votre XML semblent correctes. Les pixels mis à l'échelle sont similaires mais ne doivent être utilisés que pour les ressources textuelles, car ils reflètent également les options de mise à l'échelle du texte.

Votre problème est que votre code Java fonctionne en pixels bruts qui explique pourquoi unscale vos étoiles paraissent plus petites. La documentation Android a instructions on how to convert from dips to pixels. En bref, vous devez regarder le android.util.DisplayMetrics.density field.

6

Pour en revenir à la question initiale de comment définir la taille de texte dans les creux ou les pixels mis à l'échelle en Java:

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

OU

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