在Activity类中填充按钮

时间:2013-01-02 06:37:57

标签: android button

我想在活动类中填充字母按钮,就像这样...

enter image description here

我的代码如下:

private void populateButtons() {
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.RelativeLayout01);
        for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) {
            String buttonText = String.valueOf(buttonChar);
            Button alphabetButton = new Button(this);
            alphabetButton.setText(buttonText);
            layout.addView(alphabetButton);
        }

    }

结果是:

enter image description here

我可以手动设置所有字母按钮,但我认为在Activity类中编码更好:

    <Button
        android:id="@+id/button1"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@color/violet"
        android:text="A"
        android:textColor="@color/main"
        android:textSize="20dp"
        android:onClick="methodHere" />

那么如何使用Activity类中的java代码转换上面的xml代码。

请帮忙。

谢谢。

3 个答案:

答案 0 :(得分:1)

你可以试试这个。

private void populateButtons() {

        ArrayAdapter<String> chars = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1);

        GridView layout = (GridView) findViewById(R.id.gridView);
        for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) {
            String buttonText = String.valueOf(buttonChar);
            chars.add(buttonText);
        }
        layout.setAdapter(chars);
    }

如果您确实要插入按钮,请创建一个扩展Adapter

的类

ArrayAdapter就足够了。

public class AlphabetButtonAdapter extends ArrayAdapter<String>
{

        private List<String> objects;
        public AlphabetButtonAdapter(Context context,
                int textViewResourceId,
                List<String> objects)
        {
            super(context, textViewResourceId, objects);
            this.objects = objects;

        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            Button b = new Button(getContext());
            b.setText(objects.get(position));
            return b;
        }

        public void setOnClickListener(OnClickListener listener)
        {
             this.listener = listener;
        }

}

使用自定义适配器填充

private void populateButtons() {


            ArrayList<String> list = new ArrayList<String>();            
            GridView layout = (GridView) findViewById(R.id.gridView);
            for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) {
                String buttonText = String.valueOf(buttonChar);
                list.add(buttonText);
            }

            AlphabetButtonAdapter chars = new AlphabetButtonAdapter(context, 0, list);
            layout.setAdapter(chars);

        }

更新1:在按钮

中绑定onClick()

您可以在OnClickListener中传递AlphabetButtonAdapter,只需添加setter方法

即可
public class MyActivity OnClickListener
{

    @Override
    public void onClick(View v)
    {
             Button b = (Button) v;
             // Your definition...

    }
}

private void populateButtons() {


                ArrayList<String> list = new ArrayList<String>();            
                GridView layout = (GridView) findViewById(R.id.gridView);
                for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) {
                    String buttonText = String.valueOf(buttonChar);
                    list.add(buttonText);
                }

                AlphabetButtonAdapter chars = new AlphabetButtonAdapter(context, 0, list);
                chars.setOnClickListener(listener);
                layout.setAdapter(chars);

}

答案 1 :(得分:1)

你忘了身份证。设置按钮的ID,如此处所述。

Setting up RelativeLayout in java code

这将使代码成为:

private void populateButtons(){

  RelativeLayout layout = (RelativeLayout) findViewById(R.id.RelativeLayout01); 

  for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++){

        String buttonText = String.valueOf(buttonChar);
        Button alphabetButton = new Button(this);
        alphabetButton.setId('A');// This is just an unique integer.
        alphabetButton.setText(buttonText);
        layout.addView(alphabetButton);
    }

}        

答案 2 :(得分:0)

您应该使用具有水平方向的LinearLayout和固定的宽度和权重参数,而不是上面引用的RelativeLayout。尝试改变你的活动布局以及你的代码如下:

private void populateButtons(){

    LinearLayout layout = (LinearLayout) findViewById(R.id.RelativeLayout01);

    for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) {
        String buttonText = String.valueOf(buttonChar);
        Button alphabetButton = new Button(this);
        alphabetButton.setText(buttonText);
        layout.addView(alphabetButton);
    }

}