java - 如何循环设置按钮布局参数?

标签 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.
}

减少代码中的重复?

最佳答案

首先,我想说你的 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/

相关文章:

java - Java中如何使用LZMA SDK压缩/解压

java - Java 枚举中的实例

java - 对齐 Android ListView 中的内容

Android Alert Dialog - 如何在按下 OK 按钮后隐藏它

ruby-on-rails - 遍历字符串以根据名称字典从电子邮件中猜测名称?

java - 在运行 gradle eclipse 任务之前是否需要关闭 Eclipse?

java - 用 Java 实现一个简单的 HTTPS 代理应用程序?

android - Volley 不适用于 Gradle 2.0 和 Instant run

javascript - 在 AngularJS 中过滤多个属性

r - 在 R 中创建函数时循环将不起作用