android - tamaño - regulacion poblacional ecologia
Establezca la altura programáticamente en LayoutParams como píxeles independientes de la densidad (5)
Aquí está mi fragmento:
public class DpiUtils {
public static int toPixels(int dp, DisplayMetrics metrics) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
}
donde DisplayMetrics metrics = getResources().getDisplayMetrics()
¿Hay alguna forma de establecer el alto / ancho de un LayoutParams como píxeles independientes de la densidad (dp)? Parece que el alto / ancho, cuando se establece programáticamente, está en píxeles y no en dp.
Dado que puede usarse varias veces:
public static int convDpToPx(Context context, float dp) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
Me pareció más práctico usar la tasa de conversión, ya que generalmente se debe convertir más de un valor. Dado que la tasa de conversión no cambia, ahorra un poco de tiempo de procesamiento.
/**
* Get conversion rate from dp into px.<br>
* E.g. to convert 100dp: px = (int) (100 * convRate);
* @param context e.g. activity
* @return conversion rate
*/
public static float convRateDpToPx(Context context) {
return context.getResources().getDisplayMetrics().densityDpi / 160f;
}
La solución respondida no funcionó para mí, la altura de la vista todavía estaba apagada. Terminé con esto, que funciona bien:
protected int dp2px(int dp){
final float scale = getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
Y si quieres al revés, píxeles a dp ...
protected float px2dp(float px){
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
return Math.round(dp);
}
Necesita convertir su valor de inmersión en píxeles:
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());
Para mí, este es el truco.
public static int getDPI(int size, DisplayMetrics metrics){
return (size * metrics.densityDpi) / DisplayMetrics.DENSITY_DEFAULT;
}
Llame a la función de esta manera,
DisplayMetrics metrics;
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int heigh = getDPI(height or width, metrics);