2012-07-30 11 views
5

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

मुझे क्या बग है: मैं कैसे पता लगा सकता हूं कि मेरे कोड के अंदर कौन से लेआउट का उपयोग किया जाता है। मेरे टुकड़ों को विभिन्न लेआउट के लिए थोड़ा अलग कोड की आवश्यकता है।

सामान्य में कस्टम लेआउट प्रोग्रामिंग तर्क को अलग करने के लिए सर्वोत्तम अभ्यास क्या है मेरे टुकड़े/क्रियाकलापों के अंदर?

मेरा दृष्टिकोण अब हैकी की तरह है और विभिन्न लेआउट फ़ोल्डर्स के साथ सिंक में नहीं है।

private boolean isTabletDevice() { 
    if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb 
     // test screen size, use reflection because isLayoutSizeAtLeast is 
     // only available since 11 
     Configuration con = getResources().getConfiguration(); 
     try { 
     Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class); 
     Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE 
     return r; 
     } catch (Exception x) { 
     x.printStackTrace(); 
     return false; 
     } 
    } 
    return false; 
    } 

और फिर

if(isTabletDevice()) { 
//findViewById(R.id.onlyInTabletLayoutButton); 
}else{ 
// 
} 

उत्तर

2

इस विधि मैं व्यक्तिगत रूप से उपयोग करें आईडी। उदाहरण के लिए, मैं एक लेआउट ऐसा ही कुछ हो जाता है होगा:

<RelativeLayout 
android:id="@+id/rootView" 
android:tag="landscapehdpi"> 
<!-- Rest of layout --> 
</RelativeLayout> 

और फिर जैसे एक और एक है:

<RelativeLayout 
android:id="@+id/rootView" 
android:tag="portraitmdpi"> 
<!-- Rest of layout --> 
</RelativeLayout> 

फिर एक बार लेआउट फुलाया गया है, मैं का उपयोग करें:

View rootView = (View) findViewById(R.id.rootView); 

यह वर्तमान में उपयोग में लेआउट रूट देता है।

String tag = rootView.getTag().toString(); 

if(tag.equals("landscapehdpi")) 
{ 
//Code for the landscape hdpi screen 
} 
else if(tag.equals("portraitmdpi")) 
{ 
//Code for the portrait mdpi screen 
} 
//And so on... 

तो मूल रूप से इस का उपयोग कर आप पता कर सकते हैं जो लेआउट रनटाइम पर लोड किया गया है, और उचित चलाने: अब जो निर्धारित लेआउट यह वास्तव में है और उचित कोड को चलाने के लिए, मैं अगर-किसी और ब्लॉक के एक श्रृंखला का उपयोग करें कोड।

1

मुझे लगता है कि आप इस सवाल का यहाँ के रूप में ही समाधान के लिए देख रहे हैं,

How can I detect which layout is selected by Android in my application?

यदि आप सबसे अच्छा जवाब देखना चाहते हैं, तो दो उपलब्ध विकल्प हैं।

  1. सबसे पहले अपने मूल्य फ़ोल्डर के लिए कॉन्फ़िगरेशन का उपयोग करना है और वहां से अपनी एक्सएमएल फ़ाइल से स्ट्रिंग प्राप्त करें और इसे जांचें। (इसे ध्वज के रूप में उपयोग करने के लिए)।

https://stackoverflow.com/a/11670441/603744

  1. और अगले एक अपने लेआउट के लिए टैग सेट करने के लिए, और जो टैग यह प्रिंट पता लगाने के लिए अपने कोड से टैग हो जाते हैं और उसके आधार पर लेआउट लगता है कि यह क्या इस्तेमाल किया गया है । लेकिन आपको यह भी ध्यान रखना होगा कि इस दृष्टिकोण में थोड़ी सी चीज है। लेकिन मैंने अभी तक उन्हें थक नहीं दिया है। , मैं लेआउट के मार्ग पर एक Tag जोड़ सकते हैं और यह सुनिश्चित करें कि लेआउट जड़ों के सभी एक ही राशि बनाने

    प्रत्येक लेआउट में:

https://stackoverflow.com/a/11205220/603744

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

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