RelativeLayout с кнопками - PullRequest
       4

RelativeLayout с кнопками

0 голосов
/ 17 марта 2011

Я хочу добавить количество кнопок в RelativeLayout динамически, но мой код не работает.Он добавляет их в то же место на дисплее.

private void createButtons() {
        buttons = new ArrayList<Button>();  
        RelativeLayout bg = (RelativeLayout) findViewById(R.id.Bg);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

        for(int i = 0; i < channels.size(); i++){ 
            Button newButton = new Button(this);
            newButton.setId(i);
            newButton.setText(channels.get(i).getTitle());
            buttons.add(newButton);
            if(i > 0){
                lp.addRule(RelativeLayout.RIGHT_OF, i-1);
                bg.addView(newButton, lp);
            }else{
                bg.addView(newButton);
            }
        }

    }

Что я должен исправить, чтобы это работало?

1 Ответ

2 голосов
/ 17 марта 2011

У вас есть пара проблем. Прежде всего, вам нужно создать макет новых параметров макета для каждой кнопки, чтобы избежать проблемы, указанной @rogerkk. Во-вторых, вы пытаетесь использовать нулевой идентификатор для первой кнопки. Это не будет работать.

Вот переделка функции, которая устраняет эти две проблемы.

private void createButtons() {
    buttons = new ArrayList<Button>();  
    RelativeLayout bg = (RelativeLayout) findViewById(R.id.Bg);

    for(int i = 0; i < channels.size(); i++){ 
        Button newButton = new Button(this);
        newButton.setId(i+1); // ID of zero will not work
        newButton.setText(channels.get(i).getTitle());
        buttons.add(newButton);
        // New layout params for each button
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

        if(i > 0){
            // using getId() here in case you change how you assign IDs 
           int id =buttons.get(i-1).getId();
           lp.addRule(RelativeLayout.RIGHT_OF, id);
        }
        bg.addView(newButton,lp);            
    }

}
...