Android XML नामस्थान 'ऐप' क्या है?


164

यहाँ appनामस्थान का एक उदाहरण है जो मैंने एक res/menu/main.xmlफ़ाइल से देखा है

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="never" />
</menu>

appनेमस्पेस किस उद्देश्य से काम करता है ? क्या यह "मानक" एंड्रॉइड XML नामस्थान है? क्या समान मूल्य विकल्प दो अलग-अलग नामस्थान (जैसे app:showAsActionऔर android:showAsAction) में रखी गई समान विशेषता के लिए उपलब्ध हैं ।

से डॉक्स : android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

अर्थात, उपरोक्त उदाहरण में लाइन का मतलब कुछ और होगा यदि विशेषता इसके बजाय थी:

android:showAsAction="never"

यह लगभग ऐसा लगता है कि यह "सबक्लासिंग" तंत्र का कुछ प्रकार हो सकता है, लेकिन मुझे appGoogle / Android स्रोतों से नामस्थान पर कोई वास्तविक दस्तावेज नहीं मिल सकता है।

जवाबों:


213

appनाम स्थान में एक पुस्तकालय के लिए विशिष्ट नहीं है, लेकिन यह, सभी विशेषताओं आपके एप्लिकेशन में परिभाषित के लिए प्रयोग किया जाता है कि क्या आपके कोड से या पुस्तकालयों से आप आयात करते हैं, प्रभावी रूप से कस्टम के लिए एक एकल ग्लोबल नेम स्पेस बनाने के गुण - यानी, एंड्रॉयड प्रणाली द्वारा परिभाषित नहीं विशेषताओं ।

इस मामले में, appcompat-v7पुस्तकालय android:एंड्रॉइड के पूर्व संस्करणों का समर्थन करने के लिए नाम स्थान वालों को प्रतिबिंबित करने वाली कस्टम विशेषताओं का उपयोग करता है (उदाहरण के लिए: android:showAsActionकेवल API11 में जोड़ा गया था, लेकिन app:showAsAction(आपके एप्लिकेशन के भाग के रूप में प्रदान किया जा रहा है) आपके ऐप्लिकेशन के सभी API स्तरों पर काम करता है) - जाहिर है का उपयोग कर android:showAsActionAPI स्तरों पर काम नहीं कर सकेगा, जहां उस विशेषता परिभाषित नहीं है।


1
धन्यवाद! मैं अंत में प्रलेखन में इसके बारे में उल्लेख पाकर खुश हूं। एक अनुवर्ती प्रश्न, हालांकि। आपके लिंक में एक्शन बार डॉक्स कहता है: "ध्यान दें कि ऊपर दिया गया showAsAction विशेषता <मेनू> टैग में परिभाषित एक कस्टम नेमस्पेस का उपयोग करता है। समर्थन लाइब्रेरी द्वारा परिभाषित किसी भी XML विशेषताओं का उपयोग करते समय यह आवश्यक है, क्योंकि ये विशेषताएँ मौजूद नहीं हैं। पुराने उपकरणों पर Android ढांचा। इसलिए आपको समर्थन लाइब्रेरी द्वारा परिभाषित सभी विशेषताओं के लिए उपसर्ग के रूप में अपने स्वयं के नामस्थान का उपयोग करना चाहिए। "
coder123

1
तो पुराने उपकरणों पर क्या होता है, जहां रूपरेखा में विशेषताएँ मौजूद नहीं हैं? यह मेरे लिए अभी तक स्पष्ट नहीं है कि एक कस्टम नेमस्पेस को परिभाषित करना एक विशेषता के लिए लापता समर्थन के आसपास कैसे काम करता है। क्या showAsActionएक कस्टम नेमस्पेस के तहत घोषणा करने का मतलब है कि यह नए प्लेटफार्मों पर अपेक्षित रूप से काम करता है और पुराने लोगों पर ध्यान नहीं दिया जाता है?
कोडरज़ी 12

4
जो विशेषताएँ मौजूद नहीं हैं, उन्हें चुपचाप अनदेखा कर दिया जाता है। जब आप एक कस्टम विशेषता बनाते हैं, तो आप गारंटी दे रहे हैं कि कस्टम विशेषता रनटाइम पर मौजूद होगी (जाहिर है: इसकी परिभाषा आपके ऐप के साथ शामिल है)। इसलिए समर्थन लाइब्रेरी कस्टम विशेषताओं का उपयोग करती है ताकि मेनू के निर्माण के लिए उनका कस्टम कोड एक एकल कोड पथ का उपयोग कर सके जो सभी एपीआई संस्करणों पर काम करता है, अनिवार्य रूप से android:संस्करणों का उपयोग करने के लिए किसी भी आवश्यकता को प्रतिस्थापित करता है।
atहनुनीबल्लेक

2
मुझे खेद है अगर मैं बस नहीं मिल रहा हूँ। क्या आप मुझे यह समझने में मदद कर सकते हैं कि केवल नामस्थान बदलने से विशेषता के लिए परिभाषा कैसे मिलती है? यदि showAsNameकिसी पुरानी लाइब्रेरी में विशेषता का समर्थन नहीं किया गया है, तो कस्टम नेमस्पेस का उपयोग करके प्लेटफ़ॉर्म को संभावित मूल्य विकल्पों ( ifRoomऔर never, आदि) की सीमा जानने की अनुमति कैसे दी जाती है, और उन विकल्पों की व्याख्या कैसे करें? मैं मान रहा हूँ कि "विशेषताएँ जो मौजूद नहीं हैं" का अर्थ है वे विशेषताएँ जिनके लिए पुस्तकालय में कोई कार्यान्वयन मौजूद नहीं है। अदला-बदली android:के लिए app:मुश्किल से एक पूर्ण वैकल्पिक हल की तरह लगता है। क्या मैं कुछ भूल रहा हूँ?
कोडरज़ी

14
इसके दो भाग हैं: 1) कस्टम विशेषता ( app:showAsName) और इसके सभी संभावित मूल्य आपके ऐप में तब शामिल किए जाते हैं जब आप appcompat-v7लाइब्रेरी शामिल करते हैं (जो इसे इसकी attrs.xmlफ़ाइल में परिभाषित करता है )। 2) AppCompat पुस्तकालय (विशेष रूप से, ActionMenuView जो आपके द्वारा उपयोग किए जाने पर स्वचालित रूप से उपयोग हो जाता है ActionBarActivity) और app:showAsActionसभी API स्तरों पर समान रूप से आइटम दिखाने के लिए उपयोग करता है। यह निश्चित रूप से XML और कोड दोनों को एक साथ काम करने की आवश्यकता है।
इयानहनिबेलके

0

आप इस लिंक से कुछ स्पष्टीकरण प्राप्त कर सकते हैं

XML नाम स्थान

Namespace घोषणापत्र एक XML नाम स्थान आरक्षित XML विशेषता xmlns या xmlns: उपसर्ग का उपयोग करके घोषित किया जाता है, जिसका मान मान्य नाम स्थान नाम होना चाहिए।

उदाहरण के लिए, निम्नलिखित घोषणा "एक्सएचटीएमएल:" को एक्सएचटीएमएल नामस्थान के लिए उपसर्ग करती है:

xmlns: xhtml = "http://www.w3.org/1999/xhtml"

कोई भी तत्व या विशेषता जिसका नाम उपसर्ग "xhtml:" से शुरू होता है, उसे XHTML नामस्थान में माना जाता है, यदि उसके या पूर्वज के पास उपरोक्त नाम स्थान की घोषणा हो।

डिफ़ॉल्ट नाम स्थान की घोषणा करना भी संभव है। उदाहरण के लिए:

xmlns = "http://www.w3.org/1999/xhtml"

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

यदि कार्यक्षेत्र में कोई डिफ़ॉल्ट नामस्थान घोषणा नहीं है, तो नाम स्थान का कोई मूल्य नहीं है। [६] उस स्थिति में, बिना किसी स्पष्ट नामस्थान उपसर्ग के एक तत्व को किसी भी नामस्थान में नहीं माना जाता है।

विशेषताएँ डिफ़ॉल्ट नाम स्थान के अधीन कभी नहीं होती हैं। एक स्पष्ट नामस्थान उपसर्ग के बिना एक विशेषता को किसी भी नाम स्थान में नहीं माना जाता है।

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