xml

2012-04-19 12 views
31

में पूर्णांक संसाधनों तक पहुंचने के लिए मैंने this पढ़ा है जहां पाया गया है कि जावा क्लास में पूर्णांक संसाधनों का उपयोग कैसे करें, लेकिन किसी अन्य संसाधन के लिए कोई दस्तावेज़ नहीं है।xml

यहाँ res/values ​​/ integers.xml

<resources> 
    <integer name="input_field_padding" >5</integer> 
</resources> 

EditText में input_field_padding का उपयोग करने की कोशिश की पर संसाधन है।

<EditText 
     android:id="@+id/user_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"  
     android:padding="@integer/input_field_padding" /> 

लेकिन मैं निम्न अपवाद

java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x10 

क्या यह संभव है एक और संसाधन फ़ाइल में उपयोग करने के लिए या मैं कुछ याद आ रही है मिल गया?

उत्तर

35

अंततः मैं जावा कोड और पूर्णांक मान में पूर्णांक संसाधन तक पहुंचने में सक्षम हूं जैसे xml में dimen।

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="input_field_padding">20dip</dimen> 
    <integer name="input_field_padding">20</integer> 
</resources> 

xml फ़ाइल में: -

<EditText 
    android:id="@+id/user_name" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"  
    android:padding="@dimen/input_field_padding" /> 

जावा फ़ाइल में: -

EditText mUsername = (EditText) this.findViewById(R.id.user_name); 
//int padding = this.getResources().getInteger(R.integer.input_field_padding); 
int padding = (int) this.getResources().getDimension(R.dimen.input_field_padding); 
mUsername.setPadding(padding, padding, padding, padding); 
+4

यह उत्तर गलत मार्गदर्शन है। और उपयोग के मामले के आधार पर, गलत। कृपया नीचे मेरा जवाब देखें। –

+1

आपने पूर्णांक बनाया है, जो गैरकानूनी नहीं है, लेकिन गैर मानक है, लेकिन फिर आप इसका कभी भी उपयोग नहीं करते हैं। आपने केवल उस आयाम का उपयोग किया है जिसे आपने एक ही नाम के साथ पूर्णांक के रूप में बनाया है। कम से कम यह बुरा अभ्यास है। – dm78

+0

@ डेविडमेज़ हां, टिप्पणी की गई रेखा अवैध नहीं है और यह मेरे लिए काम करती है। आपके सुझाव के अनुसार मैंने इसे अपडेट किया। – Rafiq

10

स्वीकार किए जाते हैं जवाब पूरी तरह से गलत मार्गदर्शक है। जब तक कोई विशिष्ट अनूठा कारण न हो, तब तक आपको कभी भी पैडिंग आकार सेट करने के लिए एक इंटीजर संसाधन का उपयोग नहीं करना चाहिए। न केवल एक्सएमएल में बल्कि कोड में भी। यही कारण है कि आपने UnsupportedOperationException का अनुभव किया। स्क्रीन के डीपीआई के आधार पर इंटीजर संसाधनों को स्केल नहीं किया जाता है। जिसका मतलब है कि आप सभी उपकरणों के लिए लगातार पैडिंग नहीं करेंगे। Dimen संसाधन स्वचालित रूप से आपके लिए उनके मूल्य समायोजित करेंगे। आपका जावा कोड इस तरह दिखना चाहिए:

EditText mUsername = (EditText) this.findViewById(R.id.user_name); 
int padding = (int) this.getResources().getDimension(R.dimen.input_field_padding); 
mUsername.setPadding(padding, padding, padding, padding); 

कौन सा है, btw, वहाँ कोड में EditText तत्व की गद्दी स्थापित करने के लिए आप पहले से ही XML में ठीक से सेट करते हैं तो आवश्यकता नहीं है। जब तक आप इसे रन टाइम पर किसी भिन्न मान में बदलना नहीं चाहते थे।

और पढ़ें यहाँ:
Density Independence
Working with XML Layouts

+0

आपकी दूसरी पंक्ति '' 'R.dimen.input_field_padding''' नहीं होनी चाहिए? – tir38

+0

ओह। मिस्ड एडजस्टिंग कि जब मैंने कॉपी/चिपकाया। Thanx! –

+0

यह मेरे लिए पैडिंग छोटा बनाता है अगर मैंने अभी सीधे xml में दृश्य बनाया है। क्यूं कर? – Elliptica

2

अगर आप पूर्णांक संसाधन ले जा रहे हैं तो आप इस तरह से

int value=(int) contextG.getResources() 
      .getDimension(R.integer.myvalue); 
4

इसके अलावा आप इसे इस तरह परिभाषित कर सकते हैं R.Integer.yourintvalue ले जाना है रास्ता:

<resources> 
<item name="text_line_spacing" format="integer" type="dimen">10</item> 
</resources> 

प्रारूप = enclo गाना डेटा प्रकार:

प्रकार = संसाधन प्रकार (R.XXXXX.name साथ संदर्भित):

रंग Dimen

नाव बूलियन अंश पूर्णांक ... और प्रकार के लिए खड़ा है स्ट्रिंग शैली आदि ...

पहुँच इसे इस तरह:

Resources res = getResources(); 
int i= res.getInteger(R.dimen.int_value); 
+0

क्या मैं जो कुछ भी चाहता हूं उसका उपयोग कर सकता हूं या क्या संभव तारों का एक सेट है? – NikkyD

+1

रंग, मंद, स्ट्रिंग, शैली, आदि – Arash

-1

एक पूर्णांक क्षेत्र तक पहुँचने के लिए सही तरीका @integer/input_field_padding

उपयोग कर रहा है एक्सएमएल में

<EditText 
     android:id="@+id/user_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"  
     android:padding="@dimen/input_field_padding" /> 

जावा में

R.integer.integer_name 

यह http://developer.android.com/guide/topics/resources/more-resources.html#Integer देखें।

+0

सहमत हैं, यह करने का यह सही तरीका है। संदर्भ के लिए, मेरा 'integer_name' मान 'मान/integers.xml' में है:' 42 ' – VinceFior

+2

' R.integer.integer_name' का उपयोग करना सीधे गलत है! यह सिर्फ पूर्णांक के 'संसाधन आईडी' रखता है। आपको 'getResources()। getInteger (R.integer.SPLASH_SCREEN_DELAY) का उपयोग करना चाहिए जैसा कि अराश के उत्तर में वर्णित है (http://stackoverflow.com/a/23267383/4718314) –