[转]android:动态创建多个按钮 及 批量设置监听
之前投机取巧,先创建好多个按钮,再根据需要的数量进行部分隐藏,不过还是逃不过呀。
这样根本无法批量地 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:动态创建多个按钮 及 批量设置监听的更多相关文章
- Android商城开发系列(十四)—— 设置监听RecyclerView的位置
在前面的博客中有讲到过点击一个图片按钮控制RecyclerView的滚动到顶部位置的效果,但是那个图片按钮一直处在一个显示的状态,今天我们来改造一下那个地方,我们要实现的效果是:一开始打开的时候看不到 ...
- Android开发之动态创建多个按钮
//获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...
- Android OkHttp文件上传与下载的进度监听扩展
http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...
- swift项目第六天:中间发布按钮的封装以及监听点击事件
import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架, ...
- Android 动态创建Fragment
Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment.可以把Fr ...
- C#动态创建两个按钮,btn2复制btn1的Click事件,匿名委托
现在有一个按钮btn1,要动态创建出一个btn2,需要btn2点击时调用btn1的点击. 在delphi中这种操作很简单:btn2.onClick:=btn1.onClick,因为onClick就是个 ...
- Android开发笔记(11)——DialogFragment & 点击监听
转载请注明:http://www.cnblogs.com/igoslly/p/6931519.html DialogFragment使用 & 点击监听 /* DialogFragment是用于 ...
- Android蓝牙线控切歌、连接状态监听(无线耳机也适用)
1. 监听蓝牙设备(音频)连接状态 所有代码已测试在Android11也能正常使用 (Android SDK 30) 首先新建一个广播类 BluetoothStateReceiver /** * @a ...
- 关于android软键盘enter键的替换与事件监听
android软键盘事件监听enter键 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNo ...
随机推荐
- Sublime 3 如何设置xftp 排除文件夹“bower_components”,“node_modules”
“bower_components”,“node_modules”这个文件夹,作为模块得引用文件,不需要下载本地进行编码,这里得文件非常多,若是不把这个两个文件夹排除掉掉话,通过xftp下载所有文件的 ...
- python 3.5: TypeError: a bytes-like object is required, not 'str'
出现该错误往往是通过open()函数打开文本文件时,使用了'rb'属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了s ...
- DataTable导出到Excel
简单的导出到Excel中: 代码如下: using System; using System.Collections.Generic; using System.Data; using System. ...
- GridView模版列中设置
在GridView模版列中设置如下<asp:TemplateField HeaderText="删除"> <ItemTemplate> ...
- IE8下导入EXCEL数据传到客户端以附件下载
IE8下导入EXCEL数据传到客户端以附件下载方式出现,而不显示数据,解决方法:以text/html格式返回. HttpResponseMessage message = new HttpRespon ...
- 如何将 NavigationBar 的半透明效果关闭?
如何将 NavigationBar 的半透明效果关闭?只需三行代码就可以:self.navigationController.navigationBar.barTintColor = [UIColor ...
- Servlet引擎Jetty之入门1
Jetty与tomcat一样,HttpWeb容器,支持实现Servlet规范. 详细介绍参考:https://www.ibm.com/developerworks/cn/java/j-lo-jetty ...
- js如何求一组数中的极值
这是一个很简单的问题,现在我们从循环开始,例如一组数[5,2,1,3,4];求其中的最大值,那么首先我们要定义一个max的中间变量,遍历数组,当遇到比max值大则赋值给max,直到循环结束,就能获取这 ...
- postgres索引创建、 存储过程的创建以及在c#中的调用
postgres创建索引参考 http://www.cnblogs.com/stephen-liu74/archive/2012/05/09/2298182.html CREATE TABLE tes ...
- 【leetcode】Longest Common Prefix
题目简述: Write a function to find the longest common prefix string amongst an array of strings. 解题思路: c ...