কোনও লেআউটপ্যারামের উচ্চতা / প্রস্থকে ঘনত্ব-স্বাধীন পিক্সেল (ডিপি) হিসাবে সেট করার কোনও উপায় আছে কি ? দেখে মনে হচ্ছে উচ্চতা / প্রস্থের মতো, যখন প্রোগ্রামিকভাবে সেট করা থাকে, পিক্সেলগুলিতে থাকে এবং ডিপি হয় না।
কোনও লেআউটপ্যারামের উচ্চতা / প্রস্থকে ঘনত্ব-স্বাধীন পিক্সেল (ডিপি) হিসাবে সেট করার কোনও উপায় আছে কি ? দেখে মনে হচ্ছে উচ্চতা / প্রস্থের মতো, যখন প্রোগ্রামিকভাবে সেট করা থাকে, পিক্সেলগুলিতে থাকে এবং ডিপি হয় না।
উত্তর:
আপনার ডিপ মানটি পিক্সেলগুলিতে রূপান্তর করতে হবে:
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());
আমার জন্য এটি কৌশল করে।
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);
যেহেতু এটি একাধিকবার ব্যবহৃত হতে পারে:
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;
}
উত্তরযুক্ত সমাধানটি আমার পক্ষে কাজ করে নি, দর্শনটির উচ্চতা এখনও বন্ধ ছিল। আমি এটি দিয়ে শেষ করেছি, যা ভালভাবে কাজ করে:
protected int dp2px(int dp){
final float scale = getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
এবং আপনি যদি অন্যভাবে রাউন্ড চান তবে পিক্সেলগুলি ডিপি ...
protected float px2dp(float px){
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
return Math.round(dp);
}