在Android代码中动态添加视图

    在更高级的Android应用中,往往需要动态添加视图。要实现这样的功能,最重要的是获得被添加的视图所在的容器对象,这个容器对象所在的类需要继承ViewGroup类。通常这些容器视图被定义成XML布局文件的根节点,例如,<LinearLayout>、<RelativeLayout>等。
    将其他的视图添加到当前的容器视图中需要如下几步:
    1、获得当前的容器视图对象。
    2、获得或创建待添加的视图对象。
    3、将相应的视图对象添加到视图容器中。
    假如有两个XML布局文件:test1.xml和test2.xml。这两个布局文件的根节点都是<LinearLayout>,下面的代码获得了test2.xml文件中的LinearLayout对象,并将该对象作为test1.xml文件中的<LinearLayout>标签的字节点添加到test1.xml的LinearLayout对象中。
    //获得test1.xml中的LinearLayout对象
    LinearLayout textLinearLayout1 = (LinearLayout)getLayoutInflater().inflate(R.layout.test1, null);
    //将test1.xml中的LinearLayout对象设为当前容器视图
    setContentView(testLinearLayout1);
    //获得test2.xml中的LinearLayout对象,并将该对象添加到test1.xml的LinearLayout对象中
    LinearLayout testLinearLayout2 = (LinearLayout)getLayoutInflater().inflate(R.layout.test2, testLinearLayout1);
    其中inflate方法的第1个参数表示XML布局资源文件的ID,第二个参数表示获得容器视图对象后,要将该对象添加到哪个容器视图对象中。在这里是testLinearLayout1对象。如果不想将获得的容器视图对象添加到任何其他的容器中,inflate方法的第二个参数需要设为null。
    除了上面的添加方式外,也可以使用addView方法向容器视图中添加对象,但要将inflate方法的第二个参数设为null,代码如下:
    LinearLayout textLinearLayout1 = (LinearLayout)getLayoutInflater().inflate(R.layout.test1, null);
    setContentView(testLinearLayout1);
    LinearLayout testLinearLayout2 = (LinearLayout)getLayoutInflater().inflate(R.layout.test2, null);
    testLinearLayout1.addView(testLinearlayout2);
    除此之外,还可以完全使用Java代码创建一个视图对象,并将该对象添加到布局视图中,代码如下:
    EditText editText = new EditText(this);
    testLinearLayout1.addView(editText);
    向布局视图添加视图对象时需要注意如下两点:
    1、如果使用setContentView方法将容器视图设为当前视图后,还想向容器视图中添加新的视图或进行其他操作,setContentView方法的参数值应直接使用容器视图对象,因为这样可以向容器视图对象中添加新的视图。
    2、一个视图只能有一个父视图,也就是说,一个视图只能被包含在一个容器视图中。因此,在向容器视图添加其他视图时,不能将XML布局文件中非根节点的视图对象添加到其他的容器视图中。例如:不能将testLinearLayout2.findViewById(R.id.textView2)获得的TextView对象添加到testLinearLayout1对象中,这是因为这个TextView对象已经属于test2.xml中的<LinearLayout>标签了,不能再属于test1.xml中的<LinearLayout>标签了。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值