理论上通过setContentView(view)能够把一个view设置到activity中,但当你有很多个view控件的时候,就需要用android的布局管理器来管理view控件了。

android布局管理器有以下几种:

1.线性布局  LinearLayout

2.框架布局  FrameLayout

3.表格布局  TableLayout

4.相对布局  RelativeLayout

5.绝对布局  AbsoluteLayout

一、LinearLayout 线性布局管理器

线性布局分为水平布局和垂直布局两种。水平布局就是把view水平排列,通过layout.setOrientation(LinearLayout.HORIZONTAL);垂直是吧View垂直排列,通过layout.setOrientation(LinearLayout.VERTICAL)来实现。

public class MainActivity extends ActionBarActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); LinearLayout lly = new LinearLayout(this);
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
lly.setOrientation(LinearLayout.VERTICAL); setContentView(lly, llp); LinearLayout.LayoutParams viewparams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT); TextView tv1 = new TextView(this);
tv1.setText("This is Text1");
tv1.setBackgroundColor(Color.rgb(0, 255, 30)); TextView tv2 = new TextView(this);
tv2.setText("This is Text2");
tv2.setBackgroundColor(Color.rgb(255, 30, 60)); lly.addView(tv1,viewparams);
lly.addView(tv2,viewparams); } }

上边代码中Layoutparams llp是为了保证setContentView时候 lly布局能够填满整个屏幕;而第二个Layoutparams viewparams则是为了让lly里边的控件都能够保持长度填满lly,高度取控件自身高度,最后通过addView(view, params),通过实验发现其实这里不设置params,直接addView(view)的效果是一样的,都是长填满,高取控件高度。

二、FrameLayout 框架布局管理器

这个感觉没有什么太大的作用,FrameLayout就是把布局里边的所有控件都放到左上角,并逐个覆盖。

public class MainActivity extends ActionBarActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); FrameLayout ll = new FrameLayout(this);
FrameLayout.LayoutParams llp = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT); setContentView(ll, llp); FrameLayout.LayoutParams viewparams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT); TextView tv1 = new TextView(this);
tv1.setText("This is Text1Text1Text1.");
tv1.setBackgroundColor(Color.rgb(0, 255, 30)); TextView tv2 = new TextView(this);
tv2.setText("This is Text2");
tv2.setBackgroundColor(Color.rgb(255, 30, 60)); ll.addView(tv1,viewparams);
ll.addView(tv2,viewparams);
}
}

三、TableLayout 表格布局管理器

public class MainActivity extends ActionBarActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); TableLayout tl = new TableLayout(this);
TableLayout.LayoutParams tlp = new TableLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
tl.setBackgroundColor(Color.GREEN);
setContentView(tl, tlp); String[][] data = new String[][]{
{"姓名", "学号", "年级", "职务", "住址"},
{"小明", "1000", "3", "班长", "北京市西山区第一街365号"},
{"小兰", "2001", "6", "班长,学习委员", "北京市海淀区春熙路63号"}
}; for(int i=0; i<data.length; i++)
{
TableRow row = new TableRow(this);
for(int j=0; j<data[i].length; j++)
{
TextView tv = new TextView(this);
tv.setText(data[i][j]);
row.addView(tv);
}
tl.addView(row);
} //tl.setShrinkAllColumns(true);    //所有列都可折叠
//tl.setColumnShrinkable(3, true);  //第4列可折叠
//tl.setColumnCollapsed(2, true);   //第3列不显示
}
}
正常:
折叠:
不显示:
四、RelativeLayout 相对布局管理器
public class MainActivity extends ActionBarActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); RelativeLayout rl = new RelativeLayout(this);
RelativeLayout.LayoutParams rlp0 = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rl.setBackgroundColor(Color.rgb(102, 255, 179));
setContentView(rl, rlp0); RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rlp.addRule(RelativeLayout.BELOW, 1);
rlp.leftMargin = 10;
rlp.topMargin = 10; TextView tv1 = new TextView(this);
tv1.setText("This is Text1");
tv1.setBackgroundColor(Color.GREEN);
tv1.setId(1);
rl.addView(tv1); TextView tv2 = new TextView(this);
tv2.setText("This is Text2");
tv2.setBackgroundColor(Color.BLUE);
rl.addView(tv2, rlp); RelativeLayout.LayoutParams rlp2 = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rlp2.addRule(RelativeLayout.RIGHT_OF, 1);
rlp2.leftMargin = 10; TextView tv3 = new TextView(this);
tv3.setText("This is Text3");
tv3.setBackgroundColor(Color.YELLOW);
rl.addView(tv3, rlp2); }
}

本来想用一个layoutParams通过addRule和removeRule的方式来控制所有的RelativeLayout中的view控件,但实验中却发现要使用removeRule必须把androidSDK改到17(本来是8),还有就是,layoutParams会把所有对它进行的设置都更改之后再去设置控件,有点不懂哈,上例子:
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rlp.addRule(RelativeLayout.BELOW, 1); TextView tv1 = new TextView(this);
tv1.setText("This is Text1");
tv1.setBackgroundColor(Color.GREEN);
tv1.setId(1);
rl.addView(tv1);    

      TextView tv2 = new TextView(this);
      tv2.setText("This is Text2");
      tv2.setBackgroundColor(Color.GRAY);
      rl.addView(tv2, rlp);

        rlp.addRule(RelativeLayout.RIGHT_OF, 1);

RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rlp.addRule(RelativeLayout.BELOW, 1); rlp.addRule(RelativeLayout.RIGHT_OF, 1); TextView tv1 = new TextView(this);
tv1.setText("This is Text1");
tv1.setBackgroundColor(Color.GREEN);
tv1.setId(1);
rl.addView(tv1);      TextView tv2 = new TextView(this);
     tv2.setText("This is Text2");
     tv2.setBackgroundColor(Color.GRAY);
     rl.addView(tv2, rlp);

结果是一样的,也就是说不管 rlp2.addRule(RelativeLayout.RIGHT_OF, 1);位置在rl.addView(tv2, rlp)的前边或者后边,结果都一样,这点和传统上的顺序执行有点不一样。


android的布局管理器的更多相关文章

  1. 一步一步学android之布局管理器——LinearLayout

    线性布局是最基本的一种布局,在基本控件篇幅中用到的都是LinearLayout,线性布局有两种方式,前面也有用到,一种是垂直的(vertical),一种是水平的(horizontal).我们同样来看下 ...

  2. Android课程---布局管理器中的线性布局

    线性布局实例: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...

  3. 一步一步学android之布局管理器——RelativeLayout

    今天开始学习RelativeLayout(相对布局),相对布局在平时布局的时候用的较多,因为Android适配方面的原因.相对布局可以控制组件摆放的位置(放在任一组件的上下左右等位置),下面来看看类的 ...

  4. Android课程---布局管理器

  5. Android UI组件:布局管理器

    为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...

  6. [置顶] Android布局管理器 - 详细解析布局实现

    布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...

  7. Android布局管理器(线性布局)

    线性布局有LinearLayout类来代表,Android的线性布局和Swing的Box有点相似(他们都会将容器里面的组件一个接一个的排列起来),LinearLayout中,使用android:ori ...

  8. Android布局管理器(表格布局)

    表格布局有TableLayout所代表,TableLayout继承了LinearLayout,因此他的本质依然是LinearLayout. 表格布局采用行.列的形式来进行管理,在使用的时候不需要声明多 ...

  9. android开发4:Android布局管理器1(线性布局,相对布局RelativeLayout-案例)

    控件类概述 View 可视化控件的基类 属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickabl ...

随机推荐

  1. [leetcode]_Climbing Stairs

    我敢保证这道题是在今早蹲厕所的时候突然冒出的解法.第一次接触DP题,我好伟大啊啊啊~ 题目:一个N阶的梯子,一次能够走1步或者2步,问有多少种走法. 解法:原始DP问题. 思路: 1.if N == ...

  2. js根据日期获得星期

    var weekday = getWeekday('2013-9-26'); function getWeekday(sDate){ var dt = new Date(sDate.replace(/ ...

  3. 详解 CSS 属性 - :before && :after

    现在我们经常在 html 源码中看到如下的写法: 这里的 ::after 和 ::before 就是我们今天来探讨的 css 伪元素之二 - :before && :after. 伪元 ...

  4. 一个朋友js图表开发遇到的问题 解决思路c和js

    引言            不求知道一切, 只求发现一件 -- 乔治·西蒙·欧姆 附注:那些存在于梦幻中的事迹,那些儿时梦中的人物,每每看起,都觉得 .哎 .... 岁月 ... 一直在努力 ...  ...

  5. [转]PROC简单使用用例--VC连接ORACLE

    [转]PROC简单使用用例--VC连接ORACLE 操作系统:windows 7 数据库版本:oracle 10g VS版本:VS2010 前言:连接ORACLE的方式有很多,此处仅以PROC为例,说 ...

  6. ED/EP系列4《圈存指令》

    1. 圈存交易 通过圈存交易,持卡人可将其在银行相应账户上的资金划入电子存折或电子钱包中. 特点: 1)--必须在金融终端上联机进行; 2)--必须提交个人识别码(PIN) 步骤: 1) --终端: ...

  7. 配置DB2的数据库ODBC连接

    打开cmd窗口,输入db2cmd启动db2 clp窗口 输入db2 list node directory查看是否有数据库需要连接的节点 如果不存在,则 节点编目:db2 catalog tcpip ...

  8. windows phone版的一个儿教app

    昨天下午看见一个园友写的一篇关于儿教的api,看了也就两三个接口,所以数据处理应该不会太复杂,主要是界面的效果,要求可能比较高.于是我就重新自己写了一个app,实现很简单,花的时间比较多的地方应该是在 ...

  9. zeromq

    分布式系统之分布式中间件zeroMQ zeroMQ,又称0MQ,是一个非常简单的通信库,它扩展了传统BSD socket能力,提供简单的基于消息的通信.zeroMQ不解析消息体,没有序列化能力,或者说 ...

  10. 代码编译方式 ant +ivy

    Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. 没用过ant,了解一下,无非就这些功能, 编 ...