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 ...
随机推荐
- MongoDB的安装小结
正在做毕业设计,想尝试着用mongoDB来做数据库,之前没有接触过,然后,就在网上找资料,自己捣鼓,弄了好久才算上真正的把它安上,好心累.... 网上有很多安装教程,大同小异,这里呢,我只是想记录一下 ...
- sql分类及基本sql操作,校对规则(mysql学习笔记二)
sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询 DQL 管理(增,删,改) DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...
- 安装elasticsearch
安装elasticsearch 来自:http://www.cnblogs.com/huangfox/p/3541300.html 一)安装elasticsearch 1)下载elasticsea ...
- 【Apache】2.4.6版本的安装和配置
- linux的串口驱动分析
1.串口驱动中的数据结构 • UART驱动程序结构:struct uart_driver 驱动 • UART端口结构: struct uart_port 串口 • UART相关操作函数结构: st ...
- Python学习教程(learning Python)--2.2 Python下的变量基础
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以 网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的 ...
- java-脚本-编译-注解
有注解没注解生成字节码一样 ,只对处理它的工具有用通过注解接口定义@interface 元注解(4个)@Target ANNOTATION_TYPE/PACKAGE/TYPE/METHOD/CONST ...
- 公钥私钥 ssl/tsl的概念
一,公钥私钥1,公钥和私钥成对出现2,公开的密钥叫公钥,只有自己知道的叫私钥3,用公钥加密的数据只有对应的私钥可以解密4,用私钥加密的数据只有对应的公钥可以解密5,如果可以用公钥解密,则必然是对应的私 ...
- Kettle行列转换
Kettle在控件中拥有行列转换功能,但是行列转换貌似是弄反了. 一.行转列 1.数据库脚本 create TABLE StudentInfo ( studentno int, subject ), ...
- bhrs报表年结步骤
--前期准备数据三个表数据: s_subjtotal_year, subject_item, branch ,decrsubjtotal---informix 查看数据库剩余空间select d.na ...