我想在活动类中填充字母按钮,就像这样...
我的代码如下:
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);
}
}
结果是:
我可以手动设置所有字母按钮,但我认为在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代码。
请帮忙。
谢谢。
答案 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);
}
}