2009-02-05 17 views
11

क्या मेरे एप्लिकेशन को स्किन करने योग्य बनाने का कोई मानक तरीका है?मेरे अनुप्रयोगों को "skinnable" कैसे बनाया जाए?

"skinnable" से मेरा मतलब है कि कई खाल का समर्थन करने के लिए एप्लिकेशन की क्षमता।

मैं यहां किसी भी विशेष मंच को लक्षित नहीं कर रहा हूं। बस जानना चाहते हैं कि अनुप्रयोगों को स्किनेबल बनाने के लिए कोई सामान्य दिशानिर्देश हैं या नहीं।

ऐसा लगता है कि वेब अनुप्रयोगों को स्किनिंग अपेक्षाकृत आसान है। डेस्कटॉप अनुप्रयोगों के बारे में क्या?

उत्तर

8

खाल अभी तक अमूर्तता का एक और स्तर है (यालो!)।

यदि आप MVC design pattern पर पढ़ते हैं तो आप आवश्यक कई सिद्धांतों को समझेंगे।

प्रस्तुति परत (या त्वचा) केवल कुछ काम करने के लिए दिया गया है:

  • इंटरफ़ेस दिखाएँ
  • कुछ कार्रवाई लिया जाता है जब (क्लिक, एक बॉक्स, आदि में पाठ डालना) तो यह चलाता है कार्रवाई
  • यह जब यह

बदलने के लिए एक सामान्य कार्यक्रम में इस अमूर्त कोड है जो करने के लिए पाठ बॉक्स जोड़ता है होने से किया जाता है की जरूरत है मॉडल और नियंत्रक से नोटिस नहीं मिला है वे विधियों और ऑब्जेक्ट्स से संबंधित हैं, और कोड होने से प्रोग्राम कमांड के आधार पर डिस्प्ले बदलते हैं।

यदि आप स्किनिंग जोड़ना चाहते हैं तो आपको उस क्षमता को लेने और इसे बनाने की आवश्यकता है ताकि कोड को फिर से संकलित किए बिना किया जा सके।

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

यह तब तक कठिन प्रतीत हो सकता है जब तक आप इसे नहीं करते हैं, तो आपको एहसास होता है कि यह किसी भी अन्य स्तर के अमूर्तता की तरह है जो आपने पहले किया है (गेटोस के साथ एक कार्यक्रम से, संरचनाओं को नियंत्रित करने, कार्यों के लिए, संरचनाओं के लिए, कक्षाओं में और ऑब्जेक्ट्स, जेआईटी कंपाइलर्स, आदि)।

प्रारंभिक सीखने की अवस्था छोटी नहीं है, लेकिन कुछ परियोजनाएं करें और आपको यह मुश्किल नहीं लगेगा।

-Adam

5

एक अलग सीएसएस फ़ाइल (रों)

में अपने सभी शैलियों रखें किसी भी इनलाइन स्टाइल

+2

संक्षेप में डाल दिया:) / – xan

1

से दूर रहना बुनियादी सिद्धांत है कि वेब पृष्ठों में सीएसएस द्वारा प्रयोग किया जाता है।

आपकी सामग्री के स्वरूपण (रंग/फ़ॉन्ट/लेआउट [कुछ हद तक] निर्दिष्ट करने के बजाय, आप बस वर्णन करते हैं कि यह किस प्रकार की सामग्री है।

एक वेब उदाहरण के लिए, एक ब्लॉग पेज के लिए सामग्री में आप एक होने के रूप में विभिन्न वर्गों को चिह्नित कर सकता है:

  • ब्लॉग प्रविष्टि
  • आर्काइव फलक
  • आदि

    1. शीर्षक

      प्रवेश "हेडिंग", "बॉडी" और "टाइमस्टैम्प" जैसे सेवरल उपखंडों से बना हो सकता है।

      फिर, कहीं और आपके पास एक स्टाइलशीट है जो प्रत्येक प्रकार के तत्व, आकार, संरेखण, रंग, पृष्ठभूमि, फ़ॉन्ट इत्यादि के सभी गुणों को निर्दिष्ट करती है। पृष्ठ को प्रतिपादित करते समय या अपने यूआई में componatns को प्रारंभ/प्रारंभ करते समय आप हमेशा परामर्श करते हैं इन गुणों को देखने के लिए वर्तमान स्टाइलशीट।

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

      संपादित करें:

      एक प्रमुख मुद्दा याद करने के लिए एक सामान्य शैली (सीएसएस में कक्षाओं की तरह) और एक विशिष्ट शैली (सीएसएस में पहचान पत्र की तरह) के बीच अंतर है। आप अपने लेआउट में कुछ आइटमों को विशिष्ट रूप से पहचानने में सक्षम होना चाहते हैं, जैसे हेडिंग, एक पहचानने योग्य वस्तु के रूप में, जिसे आप एक अनूठी शैली लागू कर सकते हैं, जबकि अन्य आइटम (जैसे ब्लॉग में प्रवेश, या एक फ़ील्ड एक डेटाबेस दृश्य) सभी एक ही शैली चाहते हैं।

    3

    यह वास्तव में कैसे "skinnable" आप चाहते हैं आपकी ऐप्लिकेशन होने के लिए पर निर्भर करता है:

    WPF के लिए, क्या जोश स्मिथ संरचनात्मक skinning कॉल पर एक नज़र डालें। उपयोगकर्ता को रंगों और छवियों को कॉन्फ़िगर करने से उन्हें घटकों को छिपाने/हटाने या यहां तक ​​कि अपने स्वयं के घटकों को लिखने से बहुत आसान होना होगा।

    ज्यादातर मामलों के लिए, आप शायद किसी प्रकार के संसाधन प्रदाता को लिखने से दूर हो सकते हैं जो आपकी स्रोत फ़ाइल में हार्डकोडिंग के बजाय रंग और छवियों को प्रस्तुत करता है।तो, यह:

    Color backgroundColor = Color.BLUE; 
    

    की तरह कुछ बन सकते हैं: फिर

    Color backgroundColor = ResourceManager.getColor("form.background"); 
    

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

    0

    इस बात पर निर्भर करता है कि आप कितनी गहरी खुदाई करना चाहते हैं, आप 'फॉर्मेटिंग' फ्रेमवर्क (जैसे जावा के पीएलएफ़, वेब का सीएसएस), या पूरी तरह से डीकॉप्लेड एकाधिक स्तरीय आर्किटेक्चर का उपयोग करने का विकल्प चुन सकते हैं।

    यदि आप एक प्लग करने योग्य त्वचा को परिभाषित करना चाहते हैं, तो आपको बहुत शुरुआत से ही विचार करना होगा। प्रस्तुति परत व्यापार तर्क के बारे में कुछ भी जानता है लेकिन यह एपीआई और इसके विपरीत है।

    3

    कार्यान्वयन मंच से भिन्न होता है, लेकिन यहाँ कुछ सामान्य पार मंच विचार कर रहे हैं:

    • यह एक स्थापित समग्र लेआउट जिसमें दृश्य तत्वों "खामियों को दूर किया जा सकता है के लिए अच्छा है। " स्किनिंग के माध्यम से पूरी तरह से अलग सामान्य लेआउट का समर्थन करने के लिए यह कठिन (लेकिन अभी भी संभव है) है।
    • संपत्तियों (छवियों, एचटीएमएल टुकड़े, आदि) के लिए एक अच्छी तरह से प्रलेखित नामकरण सम्मेलन का विकास करें जिसमें त्वचा शामिल है।
    • मौजूदा खाल को "खोजने" के लिए एक साफ तरीका डिजाइन करें और नए जोड़ें। उदाहरण के लिए: Winamp सभी छवियों को अपनी खाल के लिए स्टोर करने के लिए एक ज़िप फ़ाइल प्रारूप का उपयोग करता है। सभी त्वचा फ़ाइलें एप्लिकेशन फ़ोल्डर से एक प्रसिद्ध फ़ोल्डर में रहते हैं।
    • समस्याओं को स्केल करने के बारे में जागरूक रहें। हर कोई एक ही स्क्रीन रिज़ॉल्यूशन का उपयोग नहीं करता है।
    • क्या आप तीसरे पक्ष के त्वचा के विकास की अनुमति देने जा रहे हैं? यह आपके डिजाइन को प्रभावित करेगा।
    • वास्तुशिल्प रूप से, मॉडल-व्यू-कंट्रोलर पैटर्न स्वयं को स्किनिंग के लिए उधार देता है।

    ये केवल कुछ चीजें हैं जिनके बारे में पता होना चाहिए। आपका कार्यान्वयन वेब और वसा क्लाइंट, और आपकी फीचर आवश्यकताओं के बीच अलग-अलग होगा। HTH।

    1

    यह अपेक्षाकृत आसान हो सकता है, इन चरणों का पालन करना चाहिए: बाहर अपने पूरे वेब एप्लिकेशन या वेबसाइट सीएसएस

  • उपयोग जिस तरह से अपने अनुप्रयोग लग रहा है बदलने के लिए सभी स्टाइल

    1. पट्टी।

    अधिक जानकारी के लिए विचारों के लिए css zen garden पर जाएं।

  • 0

    ऐसा लगता है कि यहां अधिकांश लोग सीएसएस का संदर्भ देते हैं, जैसे कि यह एकमात्र स्किनिंग विकल्प है। विंडोज मीडिया प्लेयर (और विनम्प, एएफएआईआर) एक त्वचा को परिभाषित करने के लिए एक्सएमएल के साथ-साथ छवियों (यदि नेक्सेसरी) का उपयोग करते हैं।

    एक्सएमएल संदर्भ हुक, घटनाएं इत्यादि और हैंडल करता है कि चीजें कैसे दिखती हैं और प्रतिक्रिया करती हैं। मुझे यकीन नहीं है कि वे बैक एंड को कैसे संभालेंगे, लेकिन किसी दिए गए त्वचा को लोड करना वास्तव में उपयुक्त XML फ़ाइल का पता लगाने के रूप में है, छवियों को लोड करना, फिर उन्हें स्थानांतरित करना जहां उन्हें जाना है।

    एक्सएमएल आपको जो भी कर सकता है उस पर आपको अधिक नियंत्रण देता है (यानी नए घटक बनाएं, घटक आकार बदलें, आदि)।

    सीएसएस के साथ संयुक्त एक्सएमएल डेस्कटॉप या वेब अनुप्रयोग के स्किनिंग इंजन के लिए अद्भुत परिणाम दे सकता है।

    1

    आपको नहीं करना चाहिए। या कम से कम आपको खुद से पूछना चाहिए कि क्या यह वास्तव में सही निर्णय है।

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

    त्वचा के कारणों के कारणों में से एक टन हैं। यदि आप बस अपना आवेदन दृष्टि से अलग करना चाहते हैं, तो यह मेरी राय में एक खराब कारण है। आप अपने ऐप को उपयोग करने में कठोर बना देंगे और कम संभावना है कि लोग कभी भी परीक्षण अवधि से आगे जाएंगे।

    यह सब कहकर, कुछ कक्षाएं हैं जहां स्किनिंग मूल रूप से अपेक्षित है, जैसे मीडिया प्लेयर और इमर्सिव पूर्ण स्क्रीन गेम। लेकिन यदि आपका ऐप उस वर्ग में नहीं है जहां स्किनिंग काफी हद तक अनिवार्य है, तो मैं आपकी प्रतिस्पर्धा से बेहतर ऐप बनाने के अन्य तरीकों को खोजने पर गंभीरता से विचार करता हूं।

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