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

这样根本无法批量地 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. iOS 编译时的警告导致无法通过编译

    今天编译react native的代码,发现了2个警告,但是系统却当做错误,不能编译成功,查看了一下编译选项,看到了如下配置: 注意到这个-Werror 了吗? 就是这个标志导致系统把所有的 警告都当 ...

  2. 设计模式--建造者模式Builder(创建型)

    一.首先看建造者模式的UML图: 二.再来看一个建造者模式的例子 class Builder { public: virtual void BuildHead() {} virtual void Bu ...

  3. Firefox Portable Developer 52.0.0.6176-6178

    FirefoxPortableDeveloper-52.0.0.6176.7z 47.9 MB FirefoxPortableDeveloper-52.0.0.6178.7z 55.8 MB

  4. 数据库sql语句规则

    sql练习: 创建一个名称为mydb1的数据库. create database mydb1; 查看库 show databases; 创建一个使用utf-8字符集的mydb2数据库. create ...

  5. php给客户端返回数据注意。

    亲身测试: 返回的时候不要直接返回字符串,要用数组的方式返回数据客户端才能接收. 看代码. <?php require_once("../base.php"); functi ...

  6. 【Django】--Models 和ORM以及admin配置

    Models 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库 <1>sqlite django默认使用sqlite的数据库 ...

  7. iOS书写高质量代码之耦合的处理

    原创 2016-12-26 MrPeak MrPeak杂货铺 耦合是每个程序员都必须面对的话题,也是容易被忽视的存在,怎么处理耦合关系到我们最后的代码质量.今天Peak君和大家聊聊耦合这个基本功话题, ...

  8. IBM CLI 和 ODBC

    Installing and Configuring DB2 Clients Running CLI/ODBC Programs The DB2 Call Level Interface (CLI) ...

  9. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...

  10. 【Java EE 学习 74 下】【数据采集系统第六天】【使用Jfreechart的统计图实现】【将JFreechart整合到项目中】

    之前说了JFreechart的基本使用方法,包括生成饼图.柱状统计图和折线统计图的方法.现在需要将其整合到数据采集系统中根据调查结果生成三种不同的统计图. 一.统计模型的分析和设计 实现统计图显示的流 ...