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;@Overrideprotected 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(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this,SecondActivity.class));}});}
}

以下进入重点:多层嵌套布局的动态生成。

情景描写叙述:父布局是一个线性布局,其子布局按竖直方向排列。子布局的子布局也是一个线性布局,按水平方向排列。

事实上非常easy,关键点在于。怎样控制主布局的子布局换行显示。即实现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;@Overrideprotected 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

转载于:https://www.cnblogs.com/mfrbuaa/p/5111135.html

Android 动态生成布局 (多层嵌套)相关推荐

  1. android textview layoutparams,Android动态设置布局的LayoutParams属性总遇到造型异常

    Android动态设置布局的setLayoutParams()属性总遇到造型异常问题 android:id="@+id/introduce" android:layout_widt ...

  2. Android 动态格子布局(淘宝,京东等首页)

    blockview 项目地址:edhlily/blockview  简介:Android 动态格子布局(淘宝,京东等首页) 更多:作者   提 Bug 标签: Android 动态格子布局(淘宝,京东 ...

  3. Android 动态解析布局,实现制作多套主题

    之前做过一个项目(随心壁纸),主要展示过去每期的壁纸主题以及相应的壁纸,而且策划要求,最好可以动态变换主题呈现方式,这样用户体验会比较好.嗯,好吧,策划的话,咱们也没法反驳,毕竟这样搞,确实很不错.于 ...

  4. android动态布局实例教程,Android 动态解析布局,实现制作多套主题

    问题背景: 之前做过一个项目(随心壁纸),主要展示过去每期的壁纸主题以及相应的壁纸,而且策划要求,最好可以动态变换主题呈现方式,这样用户体验会比较好.嗯,好吧,策划的话,咱们也没法反驳,毕竟这样搞,确 ...

  5. android 动态绘制布局,Android代码和绘制曲线中按钮和绘图板的动态布局

    时间: 2019年1月11日 本文向您介绍Android代码中的按钮和绘图板的动态布局和绘制曲线,主要包括示例android 动态绘制曲线,应用技巧,基本知识和知识android 动态绘制曲线,包括A ...

  6. android动态添加网格布局,android – 动态网格布局

    您可以动态生成GridView. GridView将根据您的需要包含ImageView和TextView.您必须使用自定义适配器.在它的getView方法中,填充ImageView和TextView. ...

  7. android 动态生成fragment,Android动态加载fragment(fragment复用)

    [实例简介] Android动态加载fragment(fragment复用) [实例截图] [核心代码] fm_reuse └── fm_reuse ├── AndroidManifest.xml ├ ...

  8. android 动态生成tablelayout,Android 表格布局TableLayout示例详解

    一.表格布局 TableLayout 表格布局TableLayout以行列的形式管理子元素,每一行是一个TableRow布局对象,当然也可以是普通的View对象,TableRow离每放一个元素就是一列 ...

  9. Android 动态生成 EditTest

    这几天,开始一个项目,需要一个小效果,就是一个输入邮箱地址的EditTest 需要动态的添加.默认有两个,然后最多5个,手机的屏幕总是有限的 好的 ,这就上代码了 布局文件 <LinearLay ...

  10. android动态更改布局宽高,动态更改Android上的线性布局宽度或高度

    我试图动态更改线性布局或任何其他窗口小部件宽度或高度,但引发异常.动态更改Android上的线性布局宽度或高度 我的布局: android:id="@+id/abc" androi ...

最新文章

  1. 容斥原理应用(求1~r中有多少个数与n互素)
  2. python函数参数定义顺序_[python]函数默认参数顺序问题
  3. 最新iOS面试必看题视频教程(附大神简历要素)
  4. 让菜鸡讲一讲网络流(isap)
  5. session超时以及销毁
  6. 电脑 u盘 正在计算机,优盘插在电脑上一直显示正在扫描优盘怎么回事
  7. unity 获取 AudioSource 分贝值
  8. 细胞周期预测 | 单细胞转录组(scRNA-seq)分析 03
  9. 使用TMT工具进行威胁分析及风险评估(TARA)
  10. 福禄克FLUKE OFP-200-S-MOD/OFP-200-S1490-MOD/OFP-200-S1625-MOD/OptiFiber Pro高动态范围模块
  11. 极坐标弧长积分公式简单理解 极坐标求面积的公式,dθ 弧长积分公式,rd​原理; 极坐标弧积分
  12. 《靠谱》里提到的书目
  13. 华为手机怎么恢复微信聊天记录(2022最新版)
  14. CDH Parcels 离线安装
  15. 磁盘管理器显示状态良好 计算机不显示,win7系统打开磁盘管理显示显示状态良好(有危险)的解决方法...
  16. 如何在 Unity 中使用 Probuilder 设计一个简单的关卡
  17. java使用bks双向认证_GitHub - wanglijun93/RxHttpUtils: Rxjava+Retrofit封装,便捷使用
  18. Java机器学习库(Java ML)(四、SVM分类器)
  19. 8.合并两个有序的数组
  20. Intra-Instance VICReg: Bag of Self-Supervised Image Patch Embedding

热门文章

  1. layui按钮展开、_layui监听工具栏(操作列表按钮)
  2. 360安全浏览器划词翻译_有种遗憾是这些浏览器插件你一个没用过
  3. hdu 3879 Base Station
  4. linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。
  5. server.xml引入子文件配置(tomcat虚拟主机)[转]
  6. 通过CloudXplorer打断异常的VHD lease连接
  7. Ubuntu系统安装VMware Tools的简单方法
  8. stdio.h库函数
  9. 通过Callable和FutureTask创建线程
  10. 批量导出数据和全部导出到Excel(详细)和mybatis 中 Foreach的用法