第九章 使用布局设计用户界面
9.1.1使用代码创建布局
9.2组织用户界面
一种特殊的view ViewGroup 它可以包含多个子view控件
手动添加view 和 layout的方法(不推荐)
TextView text1 = new TextView(this);
text1.setText("测试1");
TextView text2 = new TextView(this);
text2.setText("测试2");
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(text1);
layout.addView(text2);
setContentView(layout);
9.2组织用户界面
9.3使用内建的布局类
重要的属性名均以android:开头
如android:layout_height值可以为 具体尺寸 wrap_content match_parent
9.3.1使用FrameLayout
默认以布局的左上角进行绘制 可以通过修改layout_Gravity进行修改
9.3.2使用LinearLayout
将所有子View按照水平或者垂直排列。
一些重要的属性:
weightSum 所有子空间权重之和
一是值越大,重要性越低,所占用的空间越小;
二是值越大,重要性越高,所占用的空间越大
其实这两种情况都不太准确,第一种情况与android:layout_height(注:这里方向是竖直,如果方向设为水平,刚取决与android:layout_weight)的取值有关,如果设为fill_parent,刚第一种情况成立(注:只有此种情况下成立)
9.3.3使用RelativeLayout布局
靠指定相对位置来进行布局
一些重要属性
layout_cnterInParent:在父视图中水平,垂直居中
layout_centerHorizontal:在父视图中水平居中
layout_centerVirtical:在父视图中垂直居中
layout_alignParentTop:与父视图上边沿对齐
layout_alignParentBottom:与父视图下边沿对齐
layout_alignParentRight:右边沿
layout_alignParentLeft:左边沿
layout_alignLeft: 与指定的视图id左边沿对齐
。。。
layout_above:将该视图的下边沿放在指定视图之上
layout_below :将盖世兔的下边沿放在指定视图之下
layout_toLeftOf:右边沿放在指定视图左侧
9.3.4使用TableLayout
以表格方式摆放View
没有个TableRow就是一行View
重要的属性:
collapseColumns 使用逗号隔开想要隐藏的列号
shrinkColums:使用逗号隔开想要收缩的列号
stretchColums:使用逗号隔开想要伸展的列号
layout_colum:该TableRow子视图所在的列号
layout_span:该TableRow子视图所要合并的列号
9.3.5使用GridLayout布局管理器
视图中的子View可以自由跨越行 列
重要属性:
columnCount, rowCount :行 列的数目
orientation: 默认排列顺序
layout_column: 子View的列编号
layout_columSpan:子View的列跨度
9.3.6在屏幕上使用多布局
布局本身也是一种View,所有布局可以包含布局
orientation 布局为行或是列对齐
9.4使用容器空控件类
ViewGroup即容器,容器类型包括:
1.列表 网格 和 画廊
2.使用Taghost和TabControl表示的标签;
3.使用ScrollView和HorizontalScrollView进行滚动
4.使用ViewFlipper, ImageSwitcher,TextSwitcher所表示的开关选项
5使用SlidingDrawer隐藏或显示内容。
9.4.1使用数据驱动容器
AdapterView类型控件包括 ListView, GridView, GalleryView.
Android SDK中, Adapter从数据源中读取数据并绑定在View空间中,常见的Adapter为CursorAdapter:主要从数据库中读取数据,ArrayAdapter读取数组数据。
创建一个Adapter时,你需要提供一个布局标示符,这个标示符将作为模板填充每一行数据,你所创建的模板包含Adapter所需关联控件的标示符。
1.使用ArrayAdapter
ArrayAdapter自动将数组中的元素与一个控件view相匹配。
new ArratAdapter<数据类型>(上下文, 布局模板, 数据);
2.使用CursorAdapter
CursorAdapter需要使用过一个curson
然后实例化一个SimpleCursorAdapter
3.向AdapterView绑定数据
setAdapter(adapter);
4.处理选择时间
AdapterView处理选择View事件,需要监听Click函数
setOnItemClickListener()
第一个参数表示哪一个Adapter被点击,第二个参数为选择的View,第三个参数为列表项id列(以0开始)。
9.4.2使用标签组织视图
首先需要获得TabHost实例
getTabHost()函数
使用addTab(tabHost.newTabSpec("tab1").setIndicator("标签名称").setContent());
setContent参数有两种方法。
1.new Intent(this, ancivity.class);
2.直接使用layout的id,不过需要先将xml转换为视图,使用LayoutInflater.from(this).inflate(R.layout, tabHost.getTabContentView(), true);
9.4.3添加滚动支持
可以使用ScrollView(垂直滚动)和HorizontalScrollView(水平滚动)控件,不过控件中只能有一个子控件
9.4.4探索其他视图容器
1.开关
ImageSwitcher 和 TextSwitcher,每个Switcher只有两个View控件。
2.滑动抽屉
SlidingDrawer