[android] تعيين ارتفاع برمجيًا على LayoutParams كوحدات بكسل مستقلة عن الكثافة



Answers

 public static int getDPI(int size, DisplayMetrics metrics){
     return (size * metrics.densityDpi) / DisplayMetrics.DENSITY_DEFAULT;        
 }

استدعاء وظيفة مثل هذا ،

DisplayMetrics metrics;
metrics = new DisplayMetrics();         
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int heigh = getDPI(height or width, metrics);
Question

هل هناك أي طريقة لضبط ارتفاع / عرض LayoutParams بكسل مستقلة عن الكثافة (dp)؟ يبدو أن الارتفاع / العرض ، عند تعيينه برمجيًا ، في البكسل وليس dp.




حيث يمكن استخدامه عدة مرات:

public static int convDpToPx(Context context, float dp) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}

لقد وجدت أنه من العملي أكثر استخدام معدل التحويل ، نظرًا لأنه يجب تحويل أكثر من قيمة واحدة. نظرًا لأن معدل التحويل لا يتغير ، فإنه يحفظ قليلاً من وقت المعالجة.

/**
 * 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;
}





Links