View.setPadding केवल px में स्वीकार करता है, वहाँ वैसे भी dp में setPadding है?


93

Android फ़ंक्शन View.setPadding(int left, int top, int right, int bottom)केवल px में मान स्वीकार करता है, लेकिन मैं dp में पैडिंग सेट करना चाहता हूं। क्या इसके आसपास कोई रास्ता है?

जवाबों:


184

कोड करने के लिए सीधे

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

1
नमस्ते, मेरा एक प्रश्न है। क्या यह फॉर्मूला केवल पैडिंग या किसी और चीज के लिए उपयोग किया जाता है? उदाहरण के लिए आयत का मार्जिन या धुंधलापन?
पन्नाधाय जू

4
यह पिक्सेल इकाइयों में dp इकाइयों को बदलने के लिए सूत्र है । आप इसे कहीं भी उपयोग कर सकते हैं
लबी पानमपुलन

2
मुझे लगता है getResources()कि एक ऐसा कार्य है जो एक गतिविधि द्वारा विरासत में मिला है, लेकिन मैं इन पंक्तियों का उपयोग कस्टम लिस्टव्यू एडेप्टर में करने की कोशिश कर रहा हूं। अगर मैं कॉल नहीं कर सकता तो क्या ऐसा कोई तरीका है getResources()?
माइक बैक्सटर

1
अपने एडॉप्टर से बस getContext ()। GetResources ()। GetDisplayMetrics ()) घनत्व प्राप्त करें;
स्टीव जी।

4
क्या "+ 0.5 एफ" के लिए कहीं स्पष्टीकरण है?
जेवियर एल।

97

यदि आप XML फ़ाइल में आयाम (dp या जो भी) परिभाषित करते हैं (जो वैसे भी बेहतर है, कम से कम ज्यादातर मामलों में), तो आप इस कोड का उपयोग करके इसका पिक्सेल मान प्राप्त कर सकते हैं:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

3

Dp प्रोग्रामेटिक रूप से वैल्यू कन्वर्ट करने का एक बेहतर तरीका है:

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

फिर dpValueअपनी विधि पर लागू होते हैं , उदाहरण के लिए:setPadding(dpValue,dpValue,dpValue,dpValue);



0

मैं एक ही समस्या है। एकमात्र समाधान जो मुझे मिला है (यह वास्तव में आपकी मदद नहीं करेगा :)) इसे एक्सएमएल फ़ाइल में सेट करना है।

यदि आप कोड से घनत्व प्राप्त कर सकते हैं, तो आप रूपांतरण का उपयोग कर सकते हैं: "स्क्रीन पिक्स में डुबकी इकाइयों का रूपांतरण सरल है: पिक्सल = डिप्स * (घनत्व / 160)।" ( http://developer.android.com/guide/practices/screens_support.html से )

संपादित करें: आप स्क्रीन घनत्व प्राप्त कर सकते हैं: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.