Я хочу использовать 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.
Хм, это очень неудачно, и есть ли смысл в документации, я мог бы найти это сам? ... Поэтому мне нужно обернуть внутреннюю компоновку в другом режиме, чтобы получить желаемую функциональность? – HMeiser