Android 除了可以加载xml文件,显示布局外,也可以代码生成布局,并通过setContentView(View view)方法显示布局。单独的一层布局,如一个主布局加一个控件(如Button\imageView等)动态生成代码比较简单,下面只给出示例代码:

package com.example.android_dongtaishengcheng;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.Toast;import android.widget.RelativeLayout.LayoutParams;public class MainActivity extends Activity{    RelativeLayout relativeLayout = null;    private Button button;        @Override    protected void onCreate(Bundle savedInstanceState)    {super.onCreate(savedInstanceState);relativeLayout = new RelativeLayout(this);LayoutParams params = new LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT);relativeLayout.setLayoutParams(params);relativeLayout.setBackgroundResource(R.color.back);setContentView(relativeLayout);button = new Button(this);LayoutParams params2 = new LayoutParams(300, 300);button.setLayoutParams(params2);params2.addRule(RelativeLayout.CENTER_IN_PARENT);button.setText("hello");relativeLayout.addView(button);button.setOnClickListener(new View.OnClickListener(){        @Override    public void onClick(View v)    {// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this,SecondActivity.class));    }});    }}
下面进入重点:多层嵌套布局的动态生成。

情景描述:父布局是一个线性布局,其子布局按竖直方向排列,子布局的子布局也是一个线性布局,按水平方向排列。
其实很简单,关键点在于,如何控制主布局的子布局换行显示,即实现Orientation = "vertical"。可以在子布局外在加一层布局,即下面的drawParent()方法,该方法用来生成父布局的直接子布局,drawView()方法用来生成直接子布局的子布局(该布局也是多层嵌套)。可以实现如下图效果:


贴出代码如下:

/** *  */package com.example.android_dongtaishengcheng;import android.R.integer;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.LinearLayout.LayoutParams;/** * @author zhiyuan *  * 2014-5-29 上午10:44:44 *  */public class SecondActivity extends Activity{    LinearLayout layout = null;    LinearLayout line2 = null;    LinearLayout line3 = null;    LinearLayout line4 = null;    @Override    protected void onCreate(Bundle savedInstanceState)    {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);layout = new LinearLayout(this);LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);layout.setLayoutParams(params);layout.setOrientation(LinearLayout.VERTICAL);setContentView(layout);// layout.addView(drawView(this));line2 = (LinearLayout) drawParent(this);line3 = (LinearLayout) drawParent(this);line4 = (LinearLayout) drawParent(this);for (int i = 0; i < 2; i++){    line2.addView(drawView(SecondActivity.this, i));}for (int i = 0; i < 4; i++){    line3.addView(drawView(SecondActivity.this, i));}for(int i = 0; i < 5; i++){    line4.addView(drawView(SecondActivity.this, i));}layout.addView(line2);layout.addView(line3);layout.addView(line4);    }    //生成子布局的子布局    public View drawView(Context context, int count)    {LinearLayout layout = new LinearLayout(context);LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 1);params.gravity = Gravity.CENTER;layout.setOrientation(LinearLayout.HORIZONTAL);layout.setLayoutParams(params);if (count == 1){    layout.setBackgroundResource(R.color.back);}RelativeLayout relativeLayout = new RelativeLayout(context);android.widget.RelativeLayout.LayoutParams params3 = new android.widget.RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);relativeLayout.setLayoutParams(params3);/* * ImageView imageView = new ImageView(context); LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); */Button imageView = new Button(context);android.widget.RelativeLayout.LayoutParams params2 = new android.widget.RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT,android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);//imageView.setGravity(RelativeLayout.CENTER_IN_PARENT);imageView.setText("测试");params2.addRule(RelativeLayout.CENTER_IN_PARENT);// imageView.setBackgroundResource(R.drawable.ic_launcher);imageView.setLayoutParams(params2);        /* * TextView textView = new TextView(context); LayoutParams params3 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); textView.setText("测试专用"); * textView.setLayoutParams(params3); */relativeLayout.addView(imageView);// layout.addView(textView);        layout.addView(relativeLayout);return layout;    }    //生成主布局的子布局    public View drawParent(Context context)    {LinearLayout layout = new LinearLayout(context);LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);// params.gravity = Gravity.CENTER_HORIZONTAL;layout.setOrientation(LinearLayout.HORIZONTAL);layout.setLayoutParams(params);return layout;    }}

附Demo下载地址: http://download.csdn.net/detail/laoziyueguo3/7423939

更多相关文章

  1. 自动打开USB调试
  2. android和js互相调用的问题
  3. Android两种不同的方法去实现图像的放大与缩小(很有帮助)
  4. Android(8) RecyclerView适配器实现多布局item+item内部控件点击
  5. Android使用代码实现左右半圆的按钮背景
  6. Android(安卓)OpenGL 学习笔记 --开始篇
  7. Android(安卓)cupcake源代码获取和编译 for Ubuntu 9.04
  8. android有用代码片段(一)
  9. Android(安卓)命令行构建和签署APK

随机推荐

  1. 快递物流官方商家寄件下单API接口案例代
  2. ENAS pygraphviz 的替换之路
  3. ENAS加载自己的数据集之路
  4. 商家寄件运力接口-查询全国快递公司运力
  5. Django实战之增加评论
  6. 快递物流发货单API接口代码及功能说明
  7. 自定义select 三角样式
  8. 物流快递云打印API接口代码和应用场景
  9. ArcGIS中加载无偏移谷歌卫星影像!奥维官方
  10. 王晓鹏 | 一款实用延迟队列的自研历程