मैं कस्टम नियंत्रण में declare-styleable
जैसे एक्सएमएल (बंडल अतिरिक्त पैरामीटर का उपयोग किए बिना) का उपयोग करके एंड्रॉइड खंड में कस्टम विशेषताओं को परिभाषित करना चाहता हूं। लेकिन AttrSet पैरामीटर के साथ कोई रचनाकार नहीं हैं, तो क्या यह संभव है? क्या विशेषताएँ प्राप्त करने के लिए मैं सिर्फ public void onInflate(android.app.Activity activity, android.util.AttributeSet attrs, android.os.Bundle savedInstanceState)
ओवरराइड कर सकता हूं?एंड्रॉइड टुकड़े में कस्टम विशेषताएं
उत्तर
@Override
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
super.onInflate(activity, attrs, savedInstanceState);
// Your code here to process the attributes
}
समर्थन 4 डेमोस के लिए लिंक बदल दिया गया है या पूरे समाधान को पोस्ट करने के लिए बदला जा सकता है। ये रहा।
attrs.xml रेस में फ़ाइल बनाएँ/फ़ोल्डर महत्व देता है। या अगर फ़ाइल पहले से मौजूद है तो नीचे दी गई सामग्री जोड़ें। यह
/** * Parse attributes during inflation from a view hierarchy into the * arguments we handle. */ @Override public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { super.onInflate(activity, attrs, savedInstanceState); Log.v(TAG,"onInflate called"); TypedArray a = activity.obtainStyledAttributes(attrs,R.styleable.MyFragment); CharSequence myString = a.getText(R.styleable.MyFragment_my_string); if(myString != null) { Log.v(TAG, "My String Received : " + myString.toString()); } int myInteger = a.getInt(R.styleable.AdFragment_my_integer, -1); if(myInteger != -1) { Log.v(TAG,"My Integer Received :" + myInteger); } a.recycle(); }
में
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyFragment"> <attr name="my_string" format="string"/> <attr name="my_integer" format="integer"/> </declare-styleable>
अवहेलना टुकड़ा की onInflate प्रतिनिधि और पढ़ने के गुण निम्नलिखित के रूप में अपने लेआउट फ़ाइल में इन विशेषताओं को पारित करना। सिर्फ एक उदाहरण
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is android activity" /> <fragment android:id="@+id/ad_fragment" android:name="com.yourapp.packagename.MyFragment" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" app:my_string="Hello This is HardCoded String. Don't use me" app:my_integer="30" /> </RelativeLayout>
यही सब। यह एक कामकाजी समाधान है।
यदि आप xml में कोई नेमस्पेस त्रुटि देखते हैं तो ऐसा करने पर। बार-बार परियोजना की सफाई करने का प्रयास करें। यह कभी-कभी दयनीय लेकिन ग्रहण और कभी-कभी गलत व्यवहार करता है।
आशा है कि यह दूसरों :)
चीयर्स में मदद करता है
मेरा एंड्रॉइड स्टूडियो एक्सएमएल में लाल अंडरलाइन के साथ कस्टम विशेषताओं को दिखा रहा है जिसमें एक त्रुटि है, लेकिन पूरी परियोजना ठीक है। किसी ऐसे व्यक्ति के लिए एफवाईआई जो सोच सकता है कि वे अपनी लेआउट फ़ाइल में उन त्रुटियों को सही तरीके से देख रहे हैं। – Pocha
आप xmlns के बजाय 'http: // schemas.android.com/apk/res-auto' का उपयोग कर सकते हैं: app =" http://schemas.android.com/apk/res/com.yourapp.packagename "ऑटो पर - पैकेज पैकेज नाम। http://stackoverflow.com/questions/10448006/xml-namespace-declaration-auto-substitute-package-name –
ठीक है, मैंने पहले इसे याद किया है। यदि आप, मेरी तरह, प्रतिलिपि इसे दो स्थानों से चिपकाते हैं, ध्यान दें और सुनिश्चित करें कि नेमस्पेस मेल खाते हैं, उदा। ** xmlns: $ {NameSpace} ** और विशेषता में समान ** $ {NameSpace} **: विशेषता = "..." – TacB0sS
त्रुटियों हो रही है, जबकि संकलन: '... \ एप्लिकेशन \ रेस \ लेआउट \ select_category.xml: 26: त्रुटि: कोई संसाधन पहचानकर्ता विशेषता 'showRadioButtons के लिए मिला 'पैकेज में' com.companyX.projectY ' ... \ app \ res \ layout \ select_category.xml: 26: त्रुटि: पैकेज' com.companyX.projectY ' में विशेषता' हाइलाइट चयन 'के लिए कोई संसाधन पहचानकर्ता नहीं मिला .. \ app \ res \ layout \ select_category.xml: 26: त्रुटि: पैकेज 'com.companyX.projectY' में 0 'unselectedColor' विशेषता के लिए कोई संसाधन पहचानकर्ता नहीं मिला – Anton
ऐप xml नेमस्पेस और घोषित-स्टाइल योग्य लिखित कोर हैं ectly। यदि आवश्यक हो तो उन्हें प्रदान कर सकते हैं, – Anton