Настройка RelativeLayout в коде Java - PullRequest
8 голосов
/ 16 марта 2011

Мне трудно заставить два текстовых представления появляться поверх друг друга в моем коде Java. Вот код, с которым я экспериментирую:

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        layout = new RelativeLayout(this);
        text1 = new TextView(this);
        text1.setText("1");
        text2 = new TextView(this);
        text2.setText("2");

        RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams q = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);

        q.addRule(RelativeLayout.BELOW, layout.getId());
        text1.setLayoutParams(q);
        layout.addView(text1);


        p.addRule(RelativeLayout.BELOW,text1.getId());
        text2.setLayoutParams(p);
        layout.addView(text2);

        setContentView(layout);
    }

При этом два текстовых представления располагаются в одной строке, но я хочу, чтобы TextView text2 отображался ниже TextView text1, поэтому в моем приложении я хочу, чтобы в качестве вывода отображалось следующее:

1
2

Я пробовал разные вещи с помощью метода "addRule", я не уверен, почему это не работает. Я хочу знать, как сделать это без XML, потому что я планирую создать библиотеку методов, которые могут создавать макет, который легко настраивается путем редактирования массива.

Ответы [ 3 ]

8 голосов
/ 16 марта 2011

У вашего TextViews нет идентификатора (по умолчанию идентификатор равен -1) ... поместите его после их инициализации:

text1.setId(1111); // 1111 is just an example,
text2.setId(2222); // just make sure the id are unique
3 голосов
/ 16 марта 2011

Я не думаю, что вы хотите расположить представление text1 под RelativeLayout, так как вы добавили в него все свои представления как дети, верно? Попробуйте удалить первое правило; это правило требует, чтобы текстовое представление находилось ниже того же представления, в котором оно находится.

РЕДАКТИРОВАТЬ: Также помощь явно устанавливает идентификатор представления, относительно которого вы выкладываете.

Так вот:

text1.setId(2);
p.addRule(RelativeLayout.BELOW,2);
0 голосов
/ 17 марта 2011

для этого можно использовать XML-макет:

в относительном макете. Устанавливая первое текстовое представление и назначая ему некоторый идентификатор для следующего текстового представления, мы можем назначить параметр android: layout_below = "id вышеупомянутого текстового представления"таким образом мы получаем 2-й текстовый вид ниже 1-го текстового представления

...