क्या SetWidth (int pixels) डिप या px का उपयोग करता है?


95

क्या सेटविद (इंट पिक्सल) डिवाइस स्वतंत्र पिक्सेल या भौतिक पिक्सेल का उपयोग इकाई के रूप में करता है? उदाहरण के लिए, सेटविथ (100) किसी दृश्य की चौड़ाई को 100 डिप्स या 100 पीएक्स पर सेट करता है?

धन्यवाद।

जवाबों:


221

यह पिक्सेल का उपयोग करता है, लेकिन मुझे यकीन है कि आप सोच रहे हैं कि इसके बजाय डिप्स का उपयोग कैसे किया जाए। उत्तर में है TypedValue.applyDimension()। कोड में dips को px में कैसे परिवर्तित करें, इसका एक उदाहरण यहां दिया गया है:

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));

64
आप nbDips * getResources ()। GetDisplayMetrics () भी कह सकते हैं। घनत्व
रोमेन गाइ

9
वास्तव में, यह वही है जो TypedValue.applyDimension () करता है। मैंने माना है कि पोस्टिंग, लेकिन मुझे लगता है कि एपीआई के माध्यम से जाने के मामले में कुछ भी कभी भी बदलता है ... हालांकि मुझे लगता है कि यदि आप इसे ठीक देते हैं तो उस पद्धति का उपयोग करना सुरक्षित है। :)
डैन ल्यू

12
TheDDimension () संस्करण अधिक कोड निष्पादित करता है और इसे पढ़ने के लिए मुझे ढूंढना थोड़ा अधिक कठिन है। FWIW, जो लाइन मैंने पोस्ट की है, वह वही है जो हम वास्तव में फ्रेमवर्क और स्टैंडर्ड ऐप्स में सभी जगह इस्तेमाल करते हैं।
रोमेन गाइ

1
नमस्ते, मैंने उपरोक्त दो उदाहरणों की कोशिश की और यह पिक्सल को सही ढंग से गणना करने के लिए प्रतीत नहीं होता है। इसके बजाय, यह मुझे मेरे विचार में निर्दिष्ट सटीक मूल्य देता है: मेरे मामले में एंड्रॉइड: लेआउट_ एक्सपोज़र = "50dip"। यह मुझे xml फ़ाइल में सटीक मान लौटाएगा। मैं तो अनुप्रयोग में इस जाँच की और उम्मीद के रूप में, मूल्य सही नहीं है और देखने के लिए बहुत बड़ी तो उम्मीद ड्रॉ
जोनाथन

एकमात्र समाधान जो मैंने पीएक्स के लिए पीटी रूपांतरण के लिए पाया, वह बहुत अच्छा था।
ए-लाइव

24

कोड में DIP की निरंतर संख्या प्राप्त करने का सही तरीका एक संसाधन XML फ़ाइल है, जिसमें dp मानों की तरह थोड़ा सा है:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

फिर अपने कोड में संसाधन का उल्लेख करें जैसे:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

आपके द्वारा लौटाया गया फ्लोट डिवाइस के पिक्सेल घनत्व के अनुसार बढ़ाया जाएगा और इसलिए आपको अपने आवेदन में रूपांतरण विधि की प्रतिकृति रखने की आवश्यकता नहीं है।


मेरी स्थिति में, यह समाधान सबसे अच्छा काम करता है जहां मेरे पास एक कस्टम संवाद है जिसमें एक सूची है और एक ही चौड़ाई में हेडर लेबल और कॉलम की सूची को दृश्य में सेट करना चाहते हैं।
वेन फिप्स

आपका पहला वाक्य थोड़े मजाकिया है, आप मूल रूप से कह रहे हैं कि XML फ़ाइल बनाना "कोड में [कुछ]" निर्दिष्ट करने का उचित तरीका है । मुझे लगता है कि आप केवल कोड में निरंतर का उपयोग कर रहे हैं इसे निर्दिष्ट नहीं कर रहे हैं :)
Joffrey

@ जोफ्री हां मैं देख रहा हूं कि आपका क्या मतलब है इसलिए मैंने शब्दों को थोड़ा अपडेट किया है
SDJMcHattie

7

Method setWidth (100), 100 px को चौड़ाई के रूप में सेट करें (dp में नहीं)। यदि आप अलग-अलग Android फोन पर चौड़ाई अलग-अलग समस्याओं का सामना कर सकते हैं। तो पिक्सल के बजाय dp में माप का उपयोग करें। नमूना चौड़ाई के dp में माप प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग करें। = 300px और ऊंचाई = 400px।

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());


0

पिक्सेल निश्चित रूप से, विधि पैरामीटर के रूप में पिक्सल के लिए पूछ रहा है।


1
यदि यह लेआउट xml फ़ाइल में है, तो हम android: layout_width = "100dip" या Android: layout_width = "100px" निर्दिष्ट कर सकते हैं। स्रोत कोड में, हम 100dip के रूप में एक लेआउट की चौड़ाई निर्दिष्ट नहीं कर सकते हैं?
user256239

सीधे नहीं, आपको DisplayMetrics.d घनत्व का उपयोग करके खुद को परिवर्तित करना होगा।
रोमेन गाइ

0

उपरोक्त उत्तरों के आधार पर जो मेरे लिए ठीक है, मैं कुछ सहायक विधियाँ उत्पन्न करता हूँ , बस उन्हें पूरे प्रोजेक्ट में उपयोग करने के लिए अपने बर्तनों में जोड़ें।

   // value in DP
   public static int getValueInDP(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInDP(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    // value in PX
    public static int getValueInPixel(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInPixel(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.