क्या किसी लेआउटपरम्स की ऊंचाई / चौड़ाई को घनत्व-स्वतंत्र पिक्सल (डीपी) के रूप में सेट करने का कोई तरीका है ? यह ऊंचाई / चौड़ाई की तरह दिखता है, जब प्रोग्राम सेट किया जाता है, पिक्सेल में होता है और डीपी नहीं होता है।
क्या किसी लेआउटपरम्स की ऊंचाई / चौड़ाई को घनत्व-स्वतंत्र पिक्सल (डीपी) के रूप में सेट करने का कोई तरीका है ? यह ऊंचाई / चौड़ाई की तरह दिखता है, जब प्रोग्राम सेट किया जाता है, पिक्सेल में होता है और डीपी नहीं होता है।
जवाबों:
आपको अपने डिप वैल्यू को पिक्सल में बदलने की जरूरत है:
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);
}