android的布局管理器
理论上通过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的布局管理器的更多相关文章
- 一步一步学android之布局管理器——LinearLayout
线性布局是最基本的一种布局,在基本控件篇幅中用到的都是LinearLayout,线性布局有两种方式,前面也有用到,一种是垂直的(vertical),一种是水平的(horizontal).我们同样来看下 ...
- Android课程---布局管理器中的线性布局
线性布局实例: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...
- 一步一步学android之布局管理器——RelativeLayout
今天开始学习RelativeLayout(相对布局),相对布局在平时布局的时候用的较多,因为Android适配方面的原因.相对布局可以控制组件摆放的位置(放在任一组件的上下左右等位置),下面来看看类的 ...
- Android课程---布局管理器
- Android UI组件:布局管理器
为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...
- [置顶] Android布局管理器 - 详细解析布局实现
布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...
- Android布局管理器(线性布局)
线性布局有LinearLayout类来代表,Android的线性布局和Swing的Box有点相似(他们都会将容器里面的组件一个接一个的排列起来),LinearLayout中,使用android:ori ...
- Android布局管理器(表格布局)
表格布局有TableLayout所代表,TableLayout继承了LinearLayout,因此他的本质依然是LinearLayout. 表格布局采用行.列的形式来进行管理,在使用的时候不需要声明多 ...
- android开发4:Android布局管理器1(线性布局,相对布局RelativeLayout-案例)
控件类概述 View 可视化控件的基类 属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickabl ...
随机推荐
- C++列出完数
题目内容:自然数中,完数寥若晨星,请在从1到某个整数范围中打印出所有的完数来.所谓“完数”是指一个数恰好等于它的所有不同因子之和.例如,6是完数,因为6=1+2+3.而24不是完数,因为24≠1+2+ ...
- Win7更改默认打开方式失败
问题描述:选定某个给定文件,然后鼠标右键选择打开方式,在浏览后选到自己期望使用的应用程序,然后单击确定后,却发现没有任何效果.原文件仍然保持原来的打开方式. 问题原因:更好程序或者升级程序时安装路径发 ...
- 【转】资源文件在Delphi编程中的应用
段东宁 计亚南 (郴州职业技术学院, 湖南 郴州 423000) 摘要: 资源文件是一种能有效地组织.管理和使用资源的文件形式,在软件开发中有着广泛的应用.本文详细介绍了在Delphi编程中资源文件 ...
- 给Activity设置背景颜色
为了使得错误提示更加显眼,再用Toast+振动效果之外考虑变换整个activity的背景颜色. 尝试一: activity并没像winform一样直接给个属性来设置,就想获取整个activity的la ...
- WCF中使用控件的委托,线程中的UI委托
UI界面: <Window x:Class="InheritDemo.Window1" xmlns="http://schemas.microsoft.com/wi ...
- python基础学习笔记第二天 内建方法(s t r)
python的字符串内建函数 str.casefold()将字符串转换成小写,Unicode编码中凡是有对应的小写形式的,都会转换str.center()返回一个原字符串居中,并使用空格填充至长度 w ...
- 【WPF学习日记】——Window的DataContext绑定ViewModel
1.全局的ViewModel绑定: a)设定全局的ViewModel(App.xaml中): 1 <Application x:Class="MyTest.App" 2 xm ...
- 菜鸟学习Hibernate——一对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...
- Android---WebView显示Html乱码问题
webView.loadData(result,"text/html","UTF-8"); 反正是用上面的方法无法解决乱码的问题. 使用下面的方法就能完美解决了 ...
- thinkphp用phpexcel读取excel,并修改列中的值,再导出excel,带往excel里写入图片
<?php class GetpriceAction extends AdministratorAction { // 文件保存路径 protected $savepath; // 允许上传的文 ...