2015-02-16 5 views
7

में एएआर से संसाधन पहचानकर्ता नहीं ढूंढ सकते हैं मैंने एक आवेदन के लिए एक कस्टम प्राथमिकता विकसित की है। इसमें दो कस्टम विशेषताएं हैं। मैं अन्य परियोजनाओं में पुन: उपयोग करने के लिए वरीयता को पुस्तकालय परियोजना में स्थानांतरित करने की कोशिश कर रहा हूं। मैंने जावा फ़ाइल को इसी लेआउट और एटीआर एक्सएमएल फाइलों के साथ ले जाया। यहाँ पुस्तकालय परियोजना में attr फ़ाइल है:एक्सएमएल

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="NumberPickerPreference" > 
     <attr name="minValue" format="integer" /> 
     <attr name="maxValue" format="integer" /> 
    </declare-styleable> 
</resources> 

यहाँ प्रकट है:

<manifest package="com.mydomain.androiduilibrary"> 
</manifest> 

एक अजीब दिखने पक्का प्रकट। जब मैंने लाइब्रेरी प्रोजेक्ट जेनरेट किया था तो मैनिफेस्ट में एंड्रॉइड स्टूडियो डाला गया था, एसडीके जानकारी थी, जिसने इसके बारे में एक चेतावनी उत्पन्न की जिसे पहले से ही build.gradle फ़ाइल में निर्दिष्ट किया गया है, इसलिए मैंने मैनिफेस्ट में प्रविष्टि को हटा दिया।

मैं बंडल रिलाइज़ कार्य का उपयोग करके एएआर फ़ाइल उत्पन्न करता हूं और एंड्रॉइडुइलब्ररी-रिलीज.एर नाम की एक फ़ाइल प्राप्त करता हूं। मैं फिर उस प्रोजेक्ट पर जाता हूं जिसे इस वरीयता का उपयोग करने की आवश्यकता है और "नया मॉड्यूल | आयात। जेएआर या एएआर पैकेज" का चयन करें, एएआर पर नेविगेट करें, और यह अब मेरे प्रोजेक्ट में एंड्रॉइडयूलिब्रर-रिलीज नामक मॉड्यूल के रूप में है। मैं प्रोजेक्ट स्ट्रक्चर डायलॉग में मॉड्यूल निर्भरता करता हूं, और अब जावा कोड में वरीयता का संदर्भ दे सकता हूं। अब तक सब ठीक है.

हालांकि, जब मैं एक्सएमएल में वरीयता का संदर्भ देने का प्रयास करता हूं, तो मुझे अपने कस्टम विशेषताओं पर निम्न त्रुटि मिलती है: "त्रुटि: (9) पैकेज 'com.mydomain.androiduilibrary' में विशेषता 'minValue' के लिए कोई संसाधन पहचानकर्ता नहीं मिला "।

<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:title="@string/location_service_settings_preference_header_title" 
    xmlns:custom="http://schemas.android.com/apk/res/com.mydomain.androiduilibrary"> 

<com.mydomain.androiduilibrary.NumberPickerPreference 
    android:title="@string/update_interval_preference_title" 
    android:key="@string/update_interval_preference_key" 
    android:defaultValue="@integer/update_interval_preference_default" 
    android:summary="@string/update_interval_preference_summary" 
    custom:minValue="@integer/update_interval_preference_min" 
    custom:maxValue="@integer/update_interval_preference_max" 
    android:dialogMessage="@string/update_interval_preference_dialog_message" 
    android:dialogTitle="@string/update_interval_preference_title" /> 

मैं आर के अंदर देखो और देखते हैं कि मूल्यों R.txt में पॉप्युलेट कर रहे हैं कर सकते हैं::

int attr maxValue 0x7f010001 
int attr minValue 0x7f010000 

और वह इसकी प्रकट सही ढंग से बनाया जा रहा है:

<?xml version="1.0" encoding="UTF-8"?> 

<manifest android:versionName="1.0" android:versionCode="1" 
    xmlns:android="http://schemas.android.com/apk/res/android" package="com.mydomain.androiduilibrary"> 

    <uses-sdk android:targetSdkVersion="21" android:minSdkVersion="11"/> 

</manifest> 
यहाँ एक्सएमएल है

कस्टम वरीयता को कॉल करते समय मुझे चेतावनी भी मिलती है: "एलिमेंट com.mydomain.androiduilibrary.NumberPickerPreference की अनुमति नहीं है" तो मुझे लगता है कि यह भी एक समस्या होगी।

क्या कोई ऐसा कदम है जो मुझे याद आ रहा है जो मुझे मेरे एक्सएमएल में एएआर से तत्वों का संदर्भ देने की अनुमति देगा? मैं एंड्रॉइड स्टूडियो 1.0.2 का उपयोग कर रहा हूँ। अग्रिम में धन्यवाद।

उत्तर

5

इसे this पोस्ट से नीचे, नीचे बाहरी पुस्तकालयों के बारे में बात करते हुए नीचे हल किया गया। अनिवार्य रूप से, कोड में एएआर तत्वों का संदर्भ देते समय आप एएआर के मैनिफेस्ट में निर्दिष्ट पैकेज का उपयोग करते हैं, लेकिन जब एक्सएमएल में एएआर तत्वों का संदर्भ देते हैं तो आप प्रोजेक्ट के नामस्थान (एएआर नहीं) का हवाला देते हैं।

+0

बहुत बहुत धन्यवाद! हालांकि यह अजीब काम करता है। मैं net.mydomain.mylib.R.string.foo का उपयोग करके एक अरबी लाइब्रेरी में एक स्ट्रिंग को संदर्भित करने का प्रयास कर रहा था, यह काम नहीं किया। आपके उत्तर R.string.foo के अनुसार, जो डिफ़ॉल्ट नामस्थान परियोजना का है, काम करता है! – Hong