2013-03-15 3 views
1

Я хочу использовать RelativeLayout программно (по некоторым причинам относительно динамического создания я не могу использовать xml-layouts). Но есть проблема, я, кажется, могу только настроить детей по отношению к другим «прямым» детям. Смотрите следующий пример:Программно с использованием relativeLayout не работает с глубоким внутренним ребенком

public class PView extends RelativeLayout { 
... 

private void init(Context context) { 
    int viewId = 1; 

    LinearLayout center = new LinearLayout(context); 
    center.setOrientation(LinearLayout.VERTICAL); 

    LinearLayout.LayoutParams topParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    topParams.gravity = Gravity.CENTER_HORIZONTAL; 

    frontRow = new LinearLayout(context); 
    frontRow.setOrientation(LinearLayout.HORIZONTAL); 
    TextView tmp1 = new TextView(context); 
    tmp1.setText("TEST TEXT1"); 
    tmp1.setBackgroundColor(Color.GREEN); 
    frontRow.addView(tmp1); 


    center.setId(viewId++); 
    frontRow.setId(viewId++); 

    center.addView(frontRow,topParams); 

    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.addRule(CENTER_IN_PARENT); 
    addView(center,params); 

    LayoutParams bLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    bLayoutParams.addRule(RelativeLayout.RIGHT_OF, frontRow.getId()); 

    bImageView = new ImageView(context); 
bImageView.setImageBitmap(someBitmap); 
    addView(bImageView,bLayoutParams); 
} 

Это не работает, ImageView bImageView не расположен на правой стороне FrontRow. Но если я использую

 bLayoutParams.addRule(RelativeLayout.RIGHT_OF, center.getId()); 

он отображается справа (но, очевидно, не относится к правому компоненту).

Что именно происходит? Я действительно не нашел много информации о программном создании RelativeLayout.

ответ

2

Правила RelativeLayout применимы только к родным братьям и сестрам, которые являются прямыми детьми самого RelativeLayout. То, что вы наблюдаете, работает как предназначено/предназначено.

+0

Хм, это очень неудачно, и есть ли смысл в документации, я мог бы найти это сам? ... Поэтому мне нужно обернуть внутреннюю компоновку в другом режиме, чтобы получить желаемую функциональность? – HMeiser

Смежные вопросы