объединить 3 относительных макета несколько раз

У меня есть 3 относительных макета, и мне нужно создать один setcontetntview, который представляет собой комбинацию этих макетов, каждый из которых добавлен 3 раза и разделяет одинаковое пространство экрана, и это нужно сделать программно. Я начал с создания нового макета, добавив всего 2 экрана,

    RelativeLayout primaryLayout = new RelativeLayout(this);
    LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
    RelativeLayout newLayout = (RelativeLayout)layoutInflater.inflate(R.layout.layout3, null, false);
    RelativeLayout newLayout1 = (RelativeLayout)layoutInflater.inflate(R.layout.layout4, null, false);
    primaryLayout.addView(newLayout);
    primaryLayout.addView(newLayout1);
    setContentView(primaryLayout);

Это отображает только layout4. Кроме того, если я снова добавлю тот же макет, он выдает ошибку, указывающую, что указанный дочерний элемент уже имеет родителя, вы должны сначала вызвать removeview() для дочернего родителя. Пожалуйста помоги!


person bharath    schedule 15.03.2013    source источник


Ответы (2)


Причина, по которой отображается только layout4, заключается в том, что primaryLayout является относительным макетом. Если вы не укажете что-то, указывающее, куда они идут в этом макете, все это будет в верхнем левом углу. Так что все ставится одно на другое.

Вы не можете добавить один и тот же макет несколько раз. Вам придется повторно загружать его один раз для каждой версии, которую вы хотите, и добавлять результаты. Это похоже на ООП - RelativeLayout является экземпляром макета, раздувание создает новый экземпляр.

person Gabe Sechan    schedule 15.03.2013
comment
Спасибо за ответ, я добавил правила, но как сделать так, чтобы каждое занимало половину экрана?? - person bharath; 15.03.2013

Вы должны использовать addRule в параметре макета, чтобы установить представления относительно друг друга. Что касается жалобы на повторное добавление представления, вы можете попробовать два независимых экземпляра представления. Хотя это будет тот же макет, родитель не будет знать об этом.

РЕДАКТИРОВАТЬ:

Чтобы занять половину экрана, вы должны сообщить родительскому представлению, сколько места выделить для дочернего представления:

RelativeLayout.LayoutParams forChild = new RelativeLayout.LayoutParams(30,40);
childView.setLayoutParams(forChild);
person learner    schedule 15.03.2013
comment
Спасибо за ответ, я добавил правила, но как сделать так, чтобы каждое занимало половину экрана?? - person bharath; 15.03.2013
comment
Я отредактировал, чтобы показать вам, как установить размер дочернего представления. Вам не обязательно использовать числа, вы можете использовать такие вещи, как wrap_content и т. д. Просто поэкспериментируйте с этим. - person learner; 16.03.2013