2011-06-12 13 views
7

Benim app radyo düğmesi bir ızgara yapmaya çalışıyorum, ne öğrendik bu da LinearLayout uzanır çünkü düzenli RadioGroup kullanılarak mümkün olmadığını ve sen RadioButtons kullanarak RelativeLayout İÇ RadioGroupRadioGroup düzenlemek çalışırsanız RelativeLayout'un içinde Buttons görmüyor.RadioGroup RelativeLayout'u genişletiyor mu?

Bu sorunu düzeltmek için LinearLayout yerine RelativeLayout'u genişleten özel bir RadioGroup oluşturmak istiyorum.

Bunu nasıl yaparım?

GÜNCELLEME: Ben bu hataları ne dedin ama sınıf dosyasında düzeltmek için nasıl bilmiyorum yaptı:

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 kullanılmadan RadioButtons işleme deneyin.] [1] [1]: http://stackoverflow.com/questions/6332042/setting-up-a-radiogroup-programmatically/ 7019673 # 7019673 – Matt

cevap

8

Sen here den RadioGroup 'ın kaynak kodu almak RelativeLayout ile LinearLayout tüm girdileri değiştirmeniz gerekiyor.

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

bunlarla RadioGroup 'ın kurucular değiştirin:

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(); 
    } 
} 

aşağıdaki kurucu çıkarın

projenizde bazı xml dosyasına bu kodu ekleyin (genellikle Adından attrs.xml olan)

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

Çoğaltma: LayoutParams iç sınıfından setOnCheckedChangeWidgetListener() yönteminin tüm yinelemeleri, setOnCheckedChangeListener() yöntemiyle çağrıları çağırır. ÖNEMLİ: Bu durumda, bu aracı bu widget'ı kullanan bir koddan kullanmak mümkün olmayacaktır.

Bunu denemedik ama umarım işe yarayacaktır.

+0

Bu kulağa hoş geliyor, ancak XML ve kurucunun yaptığı değişiklikler nedir? Sadece RelativeLayout ile LinearLayout'u yeniden düşünmeyi düşünüyordum ve bu yeterli olur, yanılıyor muyum? –

+0

Evet, yanılıyorsunuz. Sadece derlenmeyecek çünkü 'RadioGroup’un yapıcısında bazı iç alanlar kullanılıyor. Bu yüzden bu xml'ye ihtiyacınız var. 'RadioGroup' widget'ının 'android: checkedButton' özniteliğini yeniden tanımlamanıza olanak tanır. Xml değerlerini kullanmanız gerektiğinden yapıcıya yapılan değişiklikler de gereklidir. – Michael

+0

Tamam Söylediklerimi yaptım, yeni sınıf dosyasında bazı hatalar var, onları yukarıdaki soruya ekledim ... –

2

Kopya here den RadioGroup için kaynak ve bunu değiştirmek için düzenleyin LinearLayout yerine RelativeLayout öğesini genişletin.

İlgili konular