Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 717|回复: 0

[实例教程]Android 动态生成控件

[复制链接]

该用户从未签到

发表于 2011-10-22 12:51:55 | 显示全部楼层 |阅读模式
   实际在开发中经常会遇到使用代码来动态的添加控件到视图中。一般情况下的步骤是:

  1.生成一个控件,比如new Button。
  2.设置控件的各种属性,比如 设置某个Button的显示文字,绑定事件等。
  3.将这个控件追加到一个容器控件中,作为这个容器控件的子控件。比如:view.AddView(...).
  4.在追加的父控件内时,可以指定布局的方式。

       在动态添加完毕后,我们还需要能够获得对这些动态添加后的控件的值。比如我添加一个文本框,我还想获得用户在这个文本框里填入的值。android的view控件里,都有个属性Tag,我们可以很方便的使用这个属性来存放我们的特殊标记,用这个特殊标记来标记我们的控件。

  获取控件的步骤:

  1.获得容器控件
  2.遍历容器控件的包含的所有子控件,根据我们设置的标识Tag属性,或者判断控件的类型来找到我们想要的控件
  3.从找到的控件里读取到我们想要的值。
  4.将收集到的值存储或其他处理

java代码: //下面是生成表单的操作



for(int i = 0; i< 5 ; i++){



TableRow row = new TableRow(this);

TextView txtView1 = new TextView(this);



EditText edit1 = new EditText(this);

txtView1.setText("lable"+i+":");

txtView1.setTag("lable"+i);

txtView1.setPadding(3, 3, 3, 3);





edit1.setTag("text"+i);

edit1.setPadding(3, 3, 3, 3);



//LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);



row.addView(txtView1);

row.addView(edit1);



LayoutParams layoutParams2 = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);



_pnlContent.addView(row,layoutParams2);

}



_pnlContent.setColumnStretchable(1,true);
上面的代码演示了创建多个TableRow控件的过程,TableRow是TableLayout的子控件。我们会在界面上放置一个 TableLayout控件,然后在动态创建TableRow,TableLayout是个表格布局,TableRow表格里的行。也就是说,我们放置了一个静态的表格,然后动态的创建这个表格里的行。

     LayoutParams 是布局参数的意思。在将创建好的子控件添加到它的父容器控件时,可以同时指定一个布局参数。这个布局参数指示了这个子控件如何在父容器控件里呈现。

  LayoutParams 的其中一个构造方法接受两个参数,指示了宽和高的布局,我们可以指定
  ViewGroup.LayoutParams.WRAP_CONTENT,以自身内容大小自动适应
  ViewGroup.LayoutParams.FILL_PARENT, 填充父容器
  setColumnStretchable是TableRow的方法。

java代码: StringBuffer sb = new StringBuffer();



for(int i = 0 ; i< _pnlContent.getChildCount();i++){

TableRow tr = (TableRow)_pnlContent.getChildAt(i);

TextView txt1 = (TextView)tr.getChildAt(0);

EditText et1 = (EditText)tr.getChildAt(1);

sb.append(String.format("{%s}={%s} ", txt1.getTag().toString(),et1.getText() ));

}



Toast.makeText(getApplicationContext(), sb.toString(), 0).show();
LayoutParams 是布局参数的意思。在将创建好的子控件添加到它的父容器控件时,可以同时指定一个布局参数。这个布局参数指示了这个子控件如何在父容器控件里呈现。

  LayoutParams 的其中一个构造方法接受两个参数,指示了宽和高的布局,我们可以指定
  ViewGroup.LayoutParams.WRAP_CONTENT,以自身内容大小自动适应
  ViewGroup.LayoutParams.FILL_PARENT, 填充父容器
  setColumnStretchable是TableRow的方法,他指示了第2列(列索引为1)是可以拉伸的。

  我们在一个按钮的单击事件里写下这样的代码

java代码: StringBuffer sb = new StringBuffer();



for(int i = 0 ; i< _pnlContent.getChildCount();i++){



TableRow tr = (TableRow)_pnlContent.getChildAt(i);



TextView txt1 = (TextView)tr.getChildAt(0);



EditText et1 = (EditText)tr.getChildAt(1);



sb.append(String.format("{%s}={%s} ", txt1.getTag().toString(),



et1.getText() ));



}



Toast.makeText(getApplicationContext(), sb.toString(), 0).show();
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 12:51:59 | 显示全部楼层

Re:[实例教程]Android

还真的和Flex挺像...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-9 07:16 , Processed in 0.376603 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表