2011-06-12 8 views
7

मैं अपने अनुप्रयोग के लिए रेडियो बटन का एक ग्रिड बनाने की कोशिश कर रहा हूँ, मैं क्या सीखा है कि इस वजह से यह LinearLayout फैली नियमित RadioGroup का उपयोग कर संभव नहीं है और आप RadioButtons का उपयोग कर RelativeLayout अंदर RadioGroupRadioGroup की व्यवस्था करने की कोशिश करता है, तो RelativeLayout के अंदर Buttons नहीं देखता है।रेडियो ग्रुप रिलेटिव लयआउट का विस्तार?

तो इसे ठीक करने के लिए मैं एक कस्टम रेडियो समूह बनाना चाहता हूं जो लीनियरलाउट के बजाय रिलेवेटिवआउट को बढ़ाता है।

मैं यह कैसे कर सकता हूं?

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

Description Resource Path Location Type 
RadioGroup_checkedButton cannot be resolved or is not a field RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 81 Java Problem 
The constructor RelativeLayout.LayoutParams(int, int, float) is undefined RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 265 Java Problem 
The method setOnCheckedChangeWidgetListener(CompoundButton.OnCheckedChangeListener) is undefined for the type RadioButton RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 363 Java Problem 
The method setOnCheckedChangeWidgetListener(null) is undefined for the type RadioButton RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 377 Java Problem 
VERTICAL cannot be resolved to a variable RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 68 Java Problem 
Widget_CompountButton_RadioButton cannot be resolved or is not a field RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 79 Java Problem 
+0

[RadioGroup के उपयोग के बिना radiobuttons प्रसंस्करण की कोशिश करो।] [1] [1]: http://stackoverflow.com/questions/6332042/setting-up-a-radiogroup-programmatically/ 7019673 # 7019673 – Matt

उत्तर

8

आप here से RadioGroup के स्रोत कोड प्राप्त RelativeLayout साथ LinearLayout की सभी प्रविष्टियों को बदलने के लिए की जरूरत है।

<resources> 
    <declare-styleable name="RadioGroup"> 
     <attr name="android:checkedButton" /> 
    </declare-styleable> 
</resources> 

इन के साथ RadioGroup के कंस्ट्रक्टर्स बदलें::

public RadioGroup(Context context) { 
    super(context); 
    if (!isInEditMode()) { 
     init(); 
    } 
} 

public RadioGroup(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    if (!isInEditMode()) { 
     TypedArray attributes = context.obtainStyledAttributes(
       attrs, R.styleable.RadioGroup, 0, 
       android.R.style.Widget_CompoundButton_RadioButton); 

     int value = attributes.getResourceId(R.styleable.RadioGroup_checkedButton, 
      View.NO_ID); 
     if (value != View.NO_ID) { 
      mCheckedId = value; 
     } 

     attributes.recycle(); 
     init(); 
    } 
} 

निम्नलिखित निर्माता निकालें

अपनी परियोजना में कुछ xml फ़ाइल के लिए इस कोड जोड़ें (आमतौर पर जैसा कि इसके नाम attrs.xml है) LayoutParams आंतरिक कक्षा से:

public LayoutParams(int w, int h, float initWeight) { 
    super(w, h, initWeight); 
} 

प्रतिकृति setOnCheckedChangeWidgetListener() विधि की सभी घटनाएं setOnCheckedChangeListener() विधि के साथ विधि कॉल करती हैं। महत्वपूर्ण: इस मामले में इस विजेट का उपयोग करने वाले कोड से इस विधि का उपयोग करना संभव नहीं होगा।

इसने कोशिश नहीं की है लेकिन उम्मीद है कि यह काम करेगा।

+0

यह अच्छा लगता है, लेकिन एक्सएमएल और कन्स्ट्रक्टर में परिवर्तन क्या है? मैं सोच रहा था कि रिलेवेटिवआउट के साथ लाइनरलाउट को दोबारा हटा दें और यह पर्याप्त होगा, क्या मैं गलत हूं? –

+0

हां, आप गलत हैं। यह सिर्फ संकलित नहीं होगा, क्योंकि कुछ आंतरिक क्षेत्रों का उपयोग 'रेडियो समूह' के निर्माता में किया जाता है। यही कारण है कि आपको इस एक्सएमएल की आवश्यकता है। यह आपको 'रेडियोग्रुप' विजेट के लिए 'एंड्रॉइड: चेकबटन' विशेषता को फिर से परिभाषित करने की अनुमति देता है। और कन्स्ट्रक्टर में परिवर्तन आवश्यक हैं क्योंकि आपको xml से मानों का उपयोग करने की आवश्यकता है। – Michael

+0

ठीक है मैंने जो कहा है, मैंने नई कक्षा फ़ाइल में कुछ त्रुटियां हैं, हालांकि उन्हें ऊपर दिए गए प्रश्न में जोड़ा गया है ... –

2

कॉपी here से RadioGroup के लिए स्रोत है और यह करने के लिए इसे बदलने के लिए संपादित LinearLayout के बजाय RelativeLayout का विस्तार करें।

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