之前投机取巧,先创建好多个按钮,再根据需要的数量进行部分隐藏,不过还是逃不过呀。

这样根本无法批量地 findId,批量地 设置监听。

所以今天还是认认真真地研究回“动态创建按钮”,终于,通过不断尝试,给我完成勒。

代码如下:

//获取屏幕大小,以合理设定 按钮 大小及位置

DisplayMetrics dm = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(dm);
  int width = dm.widthPixels;
  int height = dm.heightPixels;

//自定义layout组件
  RelativeLayout layout = new RelativeLayout(this);

//这里创建16个按钮,每行放置4个按钮

Button Btn[] = new Button[16];
  int j = -1;
  for  (int i=0; i<=15; i++) {      
        Btn[i]=new Button(this);
        Btn[i].setId(2000+i); 
        Btn[i].setText("按钮"+i);   
        RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams ((width-50)/4,40);  //设置按钮的宽度和高度
        if (i%4 == 0) {
         j++;
        }
        btParams.leftMargin = 10+ ((width-50)/4+10)*(i%4);   //横坐标定位        
        btParams.topMargin = 20 + 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不能在外部定义,因为内部类的关系,内部类好多繁琐的东西,要好好研究一番

Intent intent = new Intent();
            intent.setClass(Work_01.this, Work_02.class);
            Bundle bundle = new Bundle();
            bundle.putInt("count", i);
            intent.putExtras(bundle);
            startActivity(intent);
            Work_01.this.finish();                   
       }
     });
   }

然后,可以在Work_02里将“按下的按钮为:” i 打印出来,以确认设置的监听是否正确。

比如,按下 按钮0 ,在Work_02对应的页面里,应该打印出 “按下的按钮为:0 ”。

[转]android:动态创建多个按钮 及 批量设置监听的更多相关文章

  1. Android商城开发系列(十四)—— 设置监听RecyclerView的位置

    在前面的博客中有讲到过点击一个图片按钮控制RecyclerView的滚动到顶部位置的效果,但是那个图片按钮一直处在一个显示的状态,今天我们来改造一下那个地方,我们要实现的效果是:一开始打开的时候看不到 ...

  2. Android开发之动态创建多个按钮

    //获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...

  3. Android OkHttp文件上传与下载的进度监听扩展

    http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...

  4. swift项目第六天:中间发布按钮的封装以及监听点击事件

    import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架, ...

  5. Android 动态创建Fragment

    Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment.可以把Fr ...

  6. C#动态创建两个按钮,btn2复制btn1的Click事件,匿名委托

    现在有一个按钮btn1,要动态创建出一个btn2,需要btn2点击时调用btn1的点击. 在delphi中这种操作很简单:btn2.onClick:=btn1.onClick,因为onClick就是个 ...

  7. Android开发笔记(11)——DialogFragment & 点击监听

    转载请注明:http://www.cnblogs.com/igoslly/p/6931519.html DialogFragment使用 & 点击监听 /* DialogFragment是用于 ...

  8. Android蓝牙线控切歌、连接状态监听(无线耳机也适用)

    1. 监听蓝牙设备(音频)连接状态 所有代码已测试在Android11也能正常使用 (Android SDK 30) 首先新建一个广播类 BluetoothStateReceiver /** * @a ...

  9. 关于android软键盘enter键的替换与事件监听

    android软键盘事件监听enter键  软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNo ...

随机推荐

  1. urlencode遇到中文编码问题

    urlencode并不会改变输入的编码格式, 默认会将中文输出为 gbk 编码, 类似的, quote 会对中文进行 gbk 编码 不过, 当遇到嵌套多层的字典时, 问题就来了, 中文会被 utf8 ...

  2. js实例--飞机大战

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  3. 85. Maximal Rectangle

    85. Maximal Rectangle Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle c ...

  4. ShareSDK分享失败的原因

    关于分享估计很多都用的是ShareSDK的社会化分享,简单方便,支持的种类很多,但是一般的话都还是QQ,微信,新浪微博,腾讯微博为主. 最近需要导入一个分享的模块,失败了几次之后最终成功,分享给大家, ...

  5. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  6. Microsoft Visual Studio 工程属性表props/vsprops创建与使用

    props/vsprops:工程属性表文件(project property sheet) 后者为vs2008的,前者为vs2010及以后版本的,其主要包含工程属性配置相关,可以单独提取出来供不同工程 ...

  7. JavaScript call

    <script> function dog() { this.sound = "wangwang~"; this.shout = function () { alert ...

  8. 【python坑记录】

    python的sort函数使用的时候有一个参数cmp.一定注意这里返回值要用1和-1.不能True和False!!!

  9. linux内核(kernel)版本号的意义

    转自:http://www.cnblogs.com/jsjliuxing/archive/2011/12/01/2271182.html 在linux下有一个目录,即/usr/src/kernels/ ...

  10. 图文介绍如何在Eclipse统计代码行数(转)

    使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expressi ...