我有 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.
}
减少代码中的重复?
最佳答案
首先,我想说你的 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());
}
}
希望有帮助!
关于java - 如何循环设置按钮布局参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5541414/