2010-01-04 22 views
11

Utilicé el editor de diseño en eclipse para simular mi diseño de ui y luego creé el código para poblarlo dinámicamente y las cosas se muestran como diferentes tamaños. El XML que utilizo para añadir las imágenes de las estrellas es el siguiente:Cuál es la relación entre píxeles y píxeles escalados

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

y el código Java que utilizo para hacer la misma cosa es así:

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

Cuando ejecuto mi aplicación en el G1 todo se alinea y se ve bien, pero cuando lo ejecuto en el Droid, las estrellas que agrego a través de Java son aproximadamente la mitad del tamaño de las que agrego en mi XML. ¿Qué debo hacer para asegurarme de que todo se adapta correctamente?

Editar: Estas son excelentes respuestas, pero necesito saber cómo hacerlo desde el código. Cuando establezco el tamaño en píxeles brutos, ¿hay alguna forma de establecer el tamaño en los dip?

+11

píxeles Scaled han tenido esa textura de piel de pescado retirado de ellos, generalmente a través de la abrasión mecánica. –

+0

@Adam Davis lol – CaseyB

Respuesta

7

Aquí vamos!Necesito obtener la Densidad DisplayMetrics.

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

Gracias a todos por dirigirme en la dirección correcta!

6

De la documentación:

píxeles independientes de la escala (SP) Esto es como el unidad dp, pero también es escalado según la preferencia del tamaño de fuente del usuario . Se recomienda utilizar esta unidad cuando se especifiquen tamaños de fuente, para que se ajusten tanto para la densidad de pantalla como para las preferencias del usuario.

Suena como lo que desea utilizar para determinar el tamaño de fuente, pero yo usaría salsa para cosas como el margen/padding:

densidad de píxeles independientes (dip) Un unidad de píxel virtual que aplicaciones puede usar en la definición de su interfaz de usuario, a dimensiones de diseño expreso o posición de una manera independiente de la densidad.

18

En primer lugar, usted debe utilizar Densidad píxeles independientes - dip o dp - y no Scaled Píxeles - sp.

El píxel independiente de la densidad es equivalente a un píxel físico en una pantalla de 160 ppp. Si sus recursos están clasificados en dip, se escalarán automáticamente en pantallas con diferentes densidades; esta es la razón por la que las estrellas especificadas en su XML se ven bien. Los píxeles escalados son similares, pero se deben usar solo para recursos de texto, ya que también reflejan las opciones de escalado de texto.

Su problema es que su código Java funciona en píxeles sin escalar, por lo que sus estrellas parecen más pequeñas. La documentación de Android tiene instructions on how to convert from dips to pixels. En resumen, debe mirar el android.util.DisplayMetrics.density field.

6

Volviendo a la pregunta original de cómo se configura el tamaño del texto en los baños o escalados píxeles en Java:

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

O

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