Android 笔记之动态创建button 一行三列
package com.example.mytest2;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
/**
主的Activity
**/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取屏幕大小,以合理设定 按钮 大小及位置
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
//自定义layout组件
RelativeLayout layout = new RelativeLayout(this);
//这里创建17个按钮,每行放置4个按钮
Button Btn[] = new Button[17];
int j = -1;
int f = Btn.length;
for (int i=0; i<=Btn.length-1; i++) {
Btn[i]=new Button(this);
Btn[i].setId(2000+i);
Btn[i].setText("按钮"+i);
RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams ((width-50)/3,150);
//设置按钮的宽度和高度
if (i%3 == 0) {
j++;
}
f--;
if(f<3){
if (i%3 == 2 && i%3 == 1) {//最后一行不是3个,是2个,或者是1个,就无法整除,就会报错。加了这一个判断之后就会消除错误
j++;
}
/* if (i%3 == 1) {
j++;
}*/
}
btParams.leftMargin = 20+ ((width-50)/3+20)*(i%3); //横坐标定位
btParams.topMargin = 20 + 5*55*j; //纵坐标定位
layout.addView(Btn[i],btParams); //将按钮放入layout组件
}
this.setContentView(layout); //替换之前的布局,要是有自定义了布局的话,就要记得将这句话注视掉
//批量设置监听
for (int k = 0; k <= Btn.length-1; k++) {
//这里不需要findId,因为创建的时候已经确定哪个按钮对应哪个Id
Btn[k].setTag(k); //为按钮设置一个标记,来确认是按下了哪一个按钮
Btn[k].setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
int i = (Integer) v.getTag();
//这里的i不能在外部定义,因为内部类的关系,内部类好多繁琐的 东西,要好好研究一番
Toast.makeText(getApplicationContext(), "d:"+i, Toast.LENGTH_SHORT).show();
}
});
}
}
}
效果图如下: