如何在循环中设置按钮布局参数?

时间:2011-04-04 16:26:06

标签: java android loops

我有9个(以编程方式生成)按钮。我这样做是为了所有人:

Button btnButton1 = new Button(this);
btnButton1.setText(getText(R.string.button_1));
btnButton1.setTextSize(BUTTON_TEXT_SIZE);
btnButton1.setHeight(BUTTON_HEIGHT);
btnButton1.setWidth(BUTTON_WIDTH);
btnButton1.setOnClickListener(buttonClicked(btnButton1));

(其中buttonClicked是这样的:

  private final View.OnClickListener buttonClicked(final Button button)
  {
    return new View.OnClickListener()
    {
      public void onClick(View v)
      {
        tvButtons.append(button.getText().toString());
      }
    };        
  };

和tvButtons是一个TextView。 )

有没有办法可以做类似的事情:

for (button : buttons)
{
   button.setText &c. &c.
}

减少代码中的重复?

2 个答案:

答案 0 :(得分:3)

首先,我要说你的onClick监听器过于复杂。我重构它看起来像这样:

public void onClick(View v)
{
  tvButtons.append(((Button)v).getText().toString());
}

然后,您只需将每个按钮的onclick侦听器设置为实现该方法的类,而无需提供按钮对象。

然后我会按照Micah的建议做,并在方法中封装重复的代码部分。此外,您可以在strings.xml中创建一个数组,如下所示:

<string-array name="buttonStrings">
    <item>String1</item>
    <item>String2</item>
    <item>String3</item>
</string-array>

然后您可以使用

检索该数组
getResources().getStringArray(R.array.buttonStrings);

并循环遍历,在每个元素上调用createButton方法。整件事应该是这样的:

public class MyActivity extends Activity implements OnClickListener {

    public onCreate() {
        String[] strings = getResources().getStringArray(R.array.buttonStrings);

        for(int i=0;i<strings.length;++i) {
            createButton(strings[i]);
        }
    }

    private Button createButton(String s) {
        Button b = new Button(this);
        b.setText(s);
        b.setTextSize(BUTTON_TEXT_SIZE);
        b.setHeight(BUTTON_HEIGHT);
        b.setWidth(BUTTON_WIDTH);
        b.setOnClickListener(this);
        return b;
    }

    @Override
    public onClickListener(View v) {
        tvButtons.append(((Button)v).getText().toString());
    }
}

希望有所帮助!

答案 1 :(得分:0)

只需创建一个完成所有工作的createButton(int textResourceId)方法,并使用文本ID对其进行九次调用。