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 ...
随机推荐
- ecshop常用语句
ecshop之中的IF语句: <select name="product_cat" id="product_cat" class="form-c ...
- mysql基本数据类型(mysql学习笔记三)
Mysql数据类型 小数: 浮点:小数位可以变化 Float单精度默认精度6位左右 Double 双精度默认精度16位左右 支持,控制数值范围 Type(M,D) M表示所有数值位数(不包括小数点和符 ...
- 【转】在delphi中实现控件的拖拽
提示:可以添加一个布尔来控制可否拖动的状态,这里提供所有都能拖动的方法. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseB ...
- 限制<input>输入内容 只允许数字 或者 字母
只能输入数字: 有回显 <input onkeyup="value=value.replace(/[^\d]/g,'')"> 只能输入数字:无回显 <input ...
- 条件放在left join后面和where后面
有这样一个查询的差异: 两张表如下: 语句在这里: create table #AA ( ID int, Name nvarchar() ) insert into #AA ,'项目1' union ...
- 第十三章 调试及安全性(In .net4.5) 之 验证程序输入
1. 概述 本章介绍验证程序输入的重要性以及各种验证方法:Parse.TryParse.Convert.正则表达式.JavaScriptSerializer.XML Schemas. 2. 主要内容 ...
- 在Silverlight宿主html页面添加按钮无法显示
在建silverlight应用程序时宿主html中嵌入的silverlight时出现的问题: 预想效果: 实际效果: silverlight填满整个page的所以无法显示html中其他的控件 解决办法 ...
- WPF自定义控件(一)——Button
接触WPF也有两个多月了,有了一定的理论基础和项目经验,现在打算写一个系列,做出来一个WPF的控件库.一方面可以加强自己的水平,另一方面可以给正在学习WPF的同行一个参考.本人水平有限,难免有一些错误 ...
- wpf 动画 2个窗体切换
<Window x:Class="翻转.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xam ...
- C#调用sap接口及返回数据到sap
public class SapClass { /// <summary> /// /// </summary> /// <param name="fphm&q ...