2010-11-24 11 views
24

मैं एंड्रॉइड लाइब्रेरी प्रोजेक्ट बनाने की कोशिश कर रहा हूं, और जब बिल्ड प्रक्रिया ठीक काम करती है, तो मैं प्रोजेक्ट में संसाधन को बदलने के साथ कुछ परेशानी में भाग रहा हूं जो लाइब्रेरी का उपयोग करता है।एंड्रॉइड लाइब्रेरी प्रोजेक्ट में स्ट्रिंग (या "ओवरराइड") स्ट्रिंग

मेरी लाइब्रेरी में मेरे पास है:

  1. एक library_layout.xml युक्त

    < TextView
    एंड्रॉयड: आईडी = "@ + id/str_my_string"
    एंड्रॉयड: layout_width = "wrap_content"
    एंड्रॉइड: layout_text = "wrap_content"
    >

  2. एक जावा फ़ाइल जो कहता है

    ((TextView) this.findViewById (R.id.str_my_string)) setText (R.string.my_string)।

  3. एक संसाधन strings.xml

    < स्ट्रिंग नाम = "my_string" > प्लेसहोल्डर < युक्त/स्ट्रिंग >

परियोजना में पुस्तकालय मैं

  1. एक संसाधन का उपयोग करते हुए strings.xml युक्त

    < स्ट्रिंग नाम = "my_string" > वास्तविक स्ट्रिंग सामग्री </स्ट्रिंग >

व्यवहार मैं उम्मीद है कि जब मैं लाइब्रेरी का उपयोग कर परियोजना चलाने के लिए, पाठ दृश्य प्रदर्शित करता है वास्तविक स्ट्रिंग सामग्री, लेकिन इसमें वास्तव में झूठी शामिल है।

जो लाइब्रेरी का उपयोग करता अनुप्रयोग में देख रहे हैं, मुझे क्या करना दो R फ़ाइलों को देखने के, और उन दोनों को R.string.my_string है और उन दोनों के एक ही संख्यात्मक मान के बराबर हैं।

उत्तर

56

मेरे पास एक ही व्यवस्था है और यह मेरे लिए अपेक्षित काम करता है।

<string name="studentSinceLabel">Student Since</string> 

मुख्य एप्लिकेशन को इस मान है:

<TextView android:id="@+id/studentSinceLabel"> 

पुस्तकालय अपने strings.xml में एक डिफ़ॉल्ट मान प्रदान करता है:

पुस्तकालय एक स्ट्रिंग संसाधनों के लिए इस संदर्भ के साथ लेआउट/वर्ग है अपने स्ट्रिंग्स.एक्सएमएल में:

<string name="studentSinceLabel">Client Since</string> 

जब मैं मुख्य संसाधनों में इस संसाधन के लिए एक मूल्य प्रदान करता हूं trings।एक्सएमएल, जब मैं ऐप चलाता हूं, तो मैं "क्लाइंट से" देखता हूं, जब मैं इसे मुख्य ऐप्स strings.xml से हटा देता हूं, तो मुझे लाइब्रेरी का मान दिखाई देता है, "छात्र तब से"। ऊपर के लिंक से http://developer.android.com/tools/sdk/eclipse-adt.html

प्रासंगिक बोली::

लगता है यह मेरा पढ़ने यहाँ के आधार पर अपेक्षित व्यवहार है

ऐसे मामलों में जहां एक संसाधन आईडी दोनों आवेदन और पुस्तकालय में परिभाषित किया गया है, उपकरण सुनिश्चित करते हैं कि एप्लिकेशन में घोषित संसाधन प्राथमिकता प्राप्त करता है और लाइब्रेरी प्रोजेक्ट में संसाधन को एप्लिकेशन में संकलित नहीं किया जाता है। एपीके। यह आपके एप्लिकेशन को किसी भी लाइब्रेरी में परिभाषित किसी भी संसाधन व्यवहार या मानों का उपयोग या पुनर्वितरण करने के लिए लचीलापन देता है।

+0

तो ऐसा लगता है कि मुझे बस ग्रहण के साथ पुरानी क्रॉफ्ट की सफाई नहीं करने में समस्याएं थीं। – jwriteclub

+5

यह सही है, लेकिन यदि स्ट्रिंग का लाइब्रेरी में अनुवाद किया गया है तो यह असफल हो जाएगा। Lib में अनुवादित संस्करण उपयोग-ऐप संस्करण (अनुवादित या नहीं) को ओवरराइड करता है। इतना सबक सीखा: प्लेसहोल्डर स्ट्रिंग का अनुवाद न करें। –

+1

@johand। उन पुस्तकालयों के लिए जो अनुवादित स्ट्रिंग संसाधन का उपयोग करते हैं, किसी भी तरह से हमारी परियोजना में इसे ओवरराइड करने के लिए? – Bruce

संबंधित मुद्दे