2011-02-24 17 views
58

Göreli bir düzen içinde yer alan doğrusal bir düzen var. XML dosyasında başka bir doğrusal düzenin sağında olacak şekilde ayarlanır (bu iyi çalışır). Bazı durumlarda, etkinliğin onCreate sırasında düzenin göreli konumunu değiştirmek istiyorum, bu yüzden başka bir düzen ile ilgili "sağdaki" param değiştirmeye ihtiyacım var. Ben bu uğraş:XML'de tanımlanan mevcut bir kuralı nasıl programlı olarak kaldırırım?

RelativeLayout.LayoutParams layoutParams; 

    layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove 
      .getLayoutParams(); 
    layoutParams.addRule(RelativeLayout.RIGHT_OF, 
      R.id.new_ref_LinearLayout); 

Ama çalışmıyor: (

Herhangi ipuçları

cevap

132

Bir kuralı kaldıramazsınız, çünkü tüm kurallar her zaman sabit boyutlu bir java dizisinde depolanır. Ancak bir kuralı 0 olarak ayarlayabilirsiniz. Örneğin

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0); 
layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout); 

DÜZENLEME (Roger Rapid sayesinde):

public void removeRule(int verb) 

Yani kullanarak bir kural kaldırabilirsiniz:

API düzeyinde 17 itibariyle

, sınıf RelativeLayout.LayoutParams aşağıdaki yöntemi vardır aşağıdaki kod satırı:

Ve siz 'ekleyerek' sıfır kural ne zaman tam olarak aynı sonucu elde edecektir: Ben onCreate içinde olduğum

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0); 
+1

Tam olarak ne yaptım. tks. API düzeyinde 17 itibariyle –

+6

, sınıf RelativeLayout.LayoutParams aşağıdaki yöntemi vardır: public void removeRule (int fiil) –

+1

Ben API düzeyinde 17 öncesi uygulamalar için ne yapmalıyım? : o – marienke

0

varolan kodu aşağıdaki kodu ekleyin o

linearLayoutToMove.setLayoutParams(layoutParams)

bence Bu iş yapmalı, eğer yukarıdaki satır işe yaramazsa, yukarıdaki satırdan linearLayoutToMove.invalidate()'u aramayı deneyin.

+0

, I) (invalidate aramaya gerek yoktur. –

3

sen aramak gerektiğini düşünüyorum:

relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

LayoutParams değiştirdikten sonra.

LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.FILL_PARENT, 
    LinearLayout.LayoutParams.FILL_PARENT);

ve ardından yeni kurallar ekleyin:

düzenlemek cevap olarak, kullandığınız yeni LayoutParameters oluşturabilirsiniz. Ardından, daha önce belirtilen updateViewLayout() yöntemini kullanarak düzen parametrelerini güncelleyin.

+0

Güzel Yanıt Teşekkürler :) – Crowni