2012-05-24 17 views
11

मेरे अनुप्रयोगों में, मैं अक्सर निम्नलिखित उदाहरणों में कस्टम बिल्ड दृश्यों पर भरोसा करता हूं।ग्रहण में कस्टम एंड्रॉइड दृश्य दृश्य संपादक

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:background="@color/light_grey" 
android:layout_height="match_parent" 
android:layout_width="fill_parent" > 

<TextView 
style="@style/CardTitle" 
android:id="@+id/card_title" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent"  
/> 

<com.whiterabbit.cards.ui.AspectRatioImageView 
    android:id="@+id/card_picture" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:adjustViewBounds="true" 
    android:layout_marginLeft="30dip" 
    android:layout_marginRight="30dip"  
    android:src="@drawable/boss" 
    /> 



<ListView 
    android:id="@+id/card_properties" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

/> 

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

यह एक लंबी और उबाऊ प्रक्रिया हो सकती है, विशेष रूप से यदि एप्लिकेशन को उस गतिविधि को प्राप्त करने के लिए कुछ बातचीत की आवश्यकता होती है जिसे आप देखना चाहते हैं।

दृश्य संपादक का उपयोग करना काम नहीं करता क्योंकि यह कस्टम दृश्य लोड नहीं कर सकता है।

क्या यह देखने का कोई और तरीका है कि पूरे एप्लिकेशन में बिना किसी दृश्य के दृश्य कैसे प्रदर्शित किए जाते हैं?

+0

मेरे सवाल का पुनरीक्षण के लिए धन्यवाद @Blundell – fedepaol

उत्तर

54

आप अपने सभी कस्टम दृश्य में ऐसा कर सकते हैं:

if(!isInEditMode()){ 
    // Your custom code that is not letting the Visual Editor draw properly 
    // i.e. thread spawning or other things in the constructor 
} 

http://developer.android.com/reference/android/view/View.html#isInEditMode()

यह आपको एडीटी प्लगइन एक्सएमएल व्यूअर से कोड को छिपाने और उम्मीद है कि आप एक लेआउट प्रदर्शित करने के लिए अनुमति देता है!

View.isInEditMode()

इंगित करता है संपादन मोड में है कि क्या यह देखें। डेवलपर टूल में प्रदर्शित होने पर एक दृश्य आमतौर पर संपादन मोड में होता है। उदाहरण के लिए, यदि यह दृश्य दृश्य उपयोगकर्ता इंटरफ़ेस बिल्डर द्वारा खींचा जा रहा है, तो यह विधि सही होनी चाहिए। उप-वर्गों को विभिन्न व्यवहार प्रदान करने के लिए इस विधि के वापसी मूल्य की जांच करनी चाहिए यदि उनके सामान्य व्यवहार होस्ट वातावरण में हस्तक्षेप कर सकता है। उदाहरण के लिए: कक्षा अपने कन्स्ट्रक्टर में एक धागा फैलती है, ड्राइंग कोड डिवाइस-विशिष्ट विशेषताओं आदि पर निर्भर करता है। यह विधि आमतौर पर कस्टम विजेट के ड्राइंग कोड में चेक की जाती है।

0

आप एक कंकाल गतिविधि बना सकते हैं जो केवल उस दृश्य को लोड करता है जिसे आप देखना चाहते हैं और इसे प्रदर्शित करने के लिए पर्याप्त डेटा के साथ इसे पॉप्युलेट करते हैं।

0

मैं एंड्रॉयड स्टूडियो का उपयोग कर रहा तो मुझे यकीन है कि इस सवाल का जवाब अपने मामले के लिए लागू होगी नहीं हूँ।

मुझे लगता है कि आप कस्टम दृश्य में विधि OnDraw रद्द कर सकते थे, इस उदाहरण के एक आंतरिक छवि का पक्ष अनुपात रखने की तरह:

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    // TODO: consider storing these as member variables to reduce 
    // allocations per draw cycle. 
    int paddingLeft = getPaddingLeft(); 
    int paddingTop = getPaddingTop(); 
    int paddingRight = getPaddingRight(); 
    int paddingBottom = getPaddingBottom(); 

    int w = getWidth() - paddingLeft - paddingRight; 
    int h = getHeight() - paddingTop - paddingBottom; 

    w = w<h ? w : h; 
    h = w; 

    // Draw the example drawable on top of the text. 
    if (dieDrawable != null) { 
     dieDrawable.setBounds(paddingLeft, paddingTop, 
     paddingLeft + w, paddingTop + h); 
     dieDrawable.draw(canvas); 
    } 
} 

इस विधि दोनों एमुलेटर और डिजाइनर में चलता है।

यह किसी भी घटना को देखने redraws कि के लिए भी रन (onSizeChanged, onLayout, आदि ...)

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

  • कोई संबंधित समस्या नहीं^_^