2015-04-20 8 views
20

पर बुलाया नहीं प्राप्त करता है मैं एक कस्टम दृश्य बनाया:कस्टम दृश्य निर्माता एंड्रॉयड 5.0.2

public class SomeView extends View 

कस्टम दृश्य कंस्ट्रक्टर्स:

public SomeView (Context context) 
{ 
    super(context); 
} 
// Called when view is inflated from xml 
public SomeView (Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
} 
// Perform inflation from XML and apply a class-specific base style from a theme attribute. 
public SomeView (Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
} 

मैं भी साथ एपीआई 21 से 4 निर्माता की कोशिश की कोई भाग्य:

public VeediView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 
{ 
    super(context, attrs,defStyleAttr, defStyleRes); 
} 

XML लेआउट में मैं इस दृश्य को परिभाषित कर रहा हूँ और सब कुछ ठीक काम करते हैं।

गैलेक्सी एस 2 पर परीक्षण ठीक काम करता है और दृश्य कन्स्ट्रक्टर को कॉल किया जाता है लेकिन नेक्सस -7 एंड्रॉइड 5.0.2 पर ऐप चलाने पर रचनाकारों को बिल्कुल कॉल नहीं किया जाता है।

कोई विचार क्यों?

क्या यह रूट डिवाइस से संबंधित हो सकता है?

संबंधित एक्सएमएल दृश्य:

<com.package.name 

     android:id="@+id/scene" 
     android:onClick="startx" 
     style="@style/txt_money_style" 
     android:layout_width="72dp" 
     android:layout_height="72dp" 
     android:background="@drawable/wtbtn" 
     android:layout_gravity="right" 
     android:gravity="center_vertical|right" 
     /> 
+0

मुझे पूरा यकीन है कि इसे कॉल किया जाता है और यह कि एंड्रॉइड में गलती नहीं है। हमने कस्टम दृश्यों के आधार पर पूरी तरह से एक ऐप बनाया और 5.0.2 पर कोई समस्या नहीं थी। शायद यह आपके डिवाइस/कस्टम रोम या आपके कोड के साथ एक मुद्दा है। –

+0

अनुमान लगाया गया है: आपका दृश्य दृश्यमान नहीं है, और एक नया अनुकूलन है जो वास्तव में आवश्यक होने पर ऐसे विचारों के निर्माण को रोकता है। – yoah

+0

क्या आप 5.0.2 में स्क्रीन पर यह दृश्य देखते हैं? –

उत्तर

0

बात मैं इस कोड मिला है और फ्लॉप इसे अपने आप को विकसित करने और सब कुछ कोशिश कर के बाद यह पता चला है ऐप एकाधिक लेआउट फ़ाइलों है कि है:

लेआउट-बड़े, लेआउट-छोटे आदि ...

मैंने केवल लेआउट फ़ोल्डर पर कस्टम व्यू को परिभाषित किया है, इसलिए अन्य स्क्रीन आकारों पर स्विच करने से नियमित दृश्य शामिल होता है।

मुझे लगता है कि दूसरों को अपनी गलती से सीख सकते हैं, मैं एंड्रॉयड स्टूडियो या ग्रहण setContentView (R.layout.activity_scene) किसी तरह का और संबंधित फ़ाइल डिबग विकल्प

तो जवाब सब सुनिश्चित करने के लिए है समर्थन कर सकते हैं इच्छा लेआउट में कस्टम व्यू परिभाषित किया गया है

+0

आपके मामले में, आपको यह कोड अन्य बीफोरों से मिलता है, और जब आप कुछ दृश्यों को संपादित करते हैं तो कुछ लेआउट फ़ोल्डरों में कई परिभाषित होते हैं। यह सामान्य है, आपकी गलतियों नहीं। जो भी आप इसे नहीं बनाते हैं उसे कम करना मुश्किल है। मुझे लगता है कि लेआउट फ़ोल्डर में परिभाषित कस्टमव्यू एक्सएमएल आपके लिए पर्याप्त है। एकाधिक लेआउट में एकाधिक परिभाषित कस्टमव्यू एक्सएमएल फ़ाइल बनाना फोन स्क्रीनसाइज के साथ टैबलेट स्क्रीनसाइज़ का समर्थन करने के लिए उपयोग किया जाता है। –

6

एपीआई में 21 थेरेस अब एक 4th constructor यह हो सकता है कि आपकी XML इस बुला रहा है।

सार्वजनिक देखें (संदर्भ संदर्भ, AttributeSet attrs, पूर्णांक defStyleAttr, पूर्णांक defStyleRes)

जोड़ा गया एपीआई स्तर में 21

एक्सएमएल से मुद्रास्फीति को पूरा करें और एक वर्ग के लागू होते हैं:

डॉक्स से

थीम विशेषता या शैली संसाधन से विशिष्ट आधार शैली। व्यू का यह कन्स्ट्रक्टर उप-वर्गों को फुलाए जाने पर अपनी बेस शैली का उपयोग करने की अनुमति देता है।

  1. दिया AttributeSet में कोई विशेषता मान:

    जब किसी विशेष विशेषता के अंतिम मूल्य निर्धारित करने, चार आदानों कि सामने आते हैं।

  2. विशेषता संसाधन में निर्दिष्ट शैली संसाधन (नाम "शैली")।
  3. डिफ़ॉल्ट शैली defStyleAttr द्वारा निर्दिष्ट है।
  4. डिफ़ॉल्ट शैली defStyleRes द्वारा निर्दिष्ट है।
  5. इस विषय में मूल मूल्य।

इन इनपुटों में से प्रत्येक को निम्नलिखित क्रम में पहली सूचीबद्ध प्राथमिकता के साथ, क्रम में माना जाता है। दूसरे शब्दों में, यदि आपके द्वारा दिए गए एट्रिब्यूटसेट में, तो किसी भी शैली में निर्दिष्ट किसी भी चीज़ के बावजूद बटन का टेक्स्ट हमेशा काला होगा।

पैरामीटर

संदर्भ प्रसंग देखने के लिए, में चल रहा है, जिसके माध्यम से यह वर्तमान विषय, संसाधन, आदि का उपयोग कर सकते attrs एक्सएमएल टैग उस दृश्य बढ़ा-चढ़ाकर है की विशेषताओं। defStyleAttr वर्तमान थीम में एक विशेषता जिसमें शैली संसाधन का संदर्भ शामिल है जो दृश्य के लिए डिफ़ॉल्ट मान प्रदान करता है।डिफ़ॉल्ट के लिए देखने के लिए 0 हो सकता है। defStyleRes एक स्टाइल संसाधन का संसाधन पहचानकर्ता जो दृश्य के लिए डिफ़ॉल्ट मान प्रदान करता है, केवल तभी उपयोग किया जाता है जब defStyleAttr 0 है या थीम में नहीं पाया जा सकता है। डिफ़ॉल्ट के लिए देखने के लिए 0 हो सकता है।

+0

धन्यवाद, मैंने इसे कोई भाग्य –

4

मुझे लगता है कि आप Bestway के लिए इस निर्माता का उपयोग करना चाहिए:

public SomeView (Context context) 
{ 
    this(context , null); 
} 
// Called when view is inflated from xml 
public SomeView (Context context, AttributeSet attrs) 
{ 
    this(context, attrs , 0); 
} 
// Perform inflation from XML and apply a class-specific base style from a theme attribute. 
public SomeView (Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
    // Initialize customize constructor here 
} 
+0

के साथ आजमाया है मेरे पास पहले से ही यह निर्माता हैं –

+0

मेरा कोड आपके से अलग है। यदि यह नमूना है, तो कृपया अपना नया कोड संपादित करें और स्पष्ट करें। मैंने इस कन्स्ट्रक्टर का इस्तेमाल मेरे द्वारा उपयोग किए गए प्रत्येक कस्टमव्यू के लिए किया था। यह मेरे द्वारा परीक्षण किए गए प्रत्येक डिवाइस पर काम करता है। (एस 5, नेक्सस 4, ओप्पो ..) –

1

यहाँ संदर्भित किया जाता View.java वर्ग के स्रोत कोड है। यदि आप इसे चेक आउट करते हैं तो आप देखेंगे कि public View(Context context) हमेशा कॉल किया जाता है। यदि आपको लगता है कि इसे कॉल नहीं किया गया है लेकिन आप दृश्य देखते हैं, तो यह समस्या यह पता लगाने के लिए है कि यह एंड्रॉइड कोड की तुलना में कहलाता है। आपको वहां देखना चाहिए। यह एएस, या इसी तरह के कोड या कुछ गलत फिल्टर लॉगिंग हो सकता है।

स्रोत कोड से आप यह भी देख सकते हैं कि यह नया कन्स्ट्रक्टर है, जो एंड्रॉइड 5.0 में उच्चतर है, जिसमें सबसे अधिक कार्यान्वयन है।

public View(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 
संबंधित मुद्दे