今天继续学习控件
今天遇到问题:
1.ArrayAdapter requires the resource ID to be a TextView问题
xmlns:android=http://schemas.android.com/apk/res/android就是这句了....
添加到自己的TextView中就ok.
因为根节点必须是TextView
修改后的list_item.xml
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
android:textSize="16sp"
android:textStyle="bold"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
TableLayout
Android TableLayout 将视图分为行和列。将使用元素建立行在表中。每一行都有零个或多个单元,每个单元可以容纳一个 View 对象。
TableLayout 容器不显示自己的行,列或单元格的边界线。
1.TableLayout行列数的确定 TableLayout的行数由开发人员直接指定,即有多少个TableRow对象(或View控件),就有多少行。
TableLayout的列数等于含有最多子控件的TableRow的列数。如第一TableRow含2个子控件,第二个TableRow含3个,第三个TableRow含4个,那么该TableLayout的列数为4.
2.TableLayout 属性
以下是具体TableLayout 的重要属性:
属性描述
android:id这是布局的唯一标识ID。
android:collapseColumns列从零开始的索引萎缩。列索引必须用逗号分隔:1, 2, 5.
android:stretchColumns列从零开始的索引伸展。列索引必须用逗号分隔: 1, 2, 5.
android:shrinkColumns 设置可收缩的列。当该列子控件的内容太多,已经挤满所在行,那么该子控件的内容将往列方向显示。
android:stretchColumns="0" 第0列可伸展 有多长伸展多长 可以挤满所在行导致其他子控件不展示
android:shrinkColumns="1,2" 第1,2列皆可收缩
android:collapseColumns="*" 隐藏所有行
android:stretchColumns=“*” "1,2,3" 行内控件全部可以根据内容拉伸,设置*没有用
3.单元格属性
android:layout_column 指定该单元格在第几列显示
android:layout_span 指定该单元格占据的列数(未指定时,为1)最多占用单元格的最多列数
示例:
android:layout_column="1" 该控件显示在第1列
android:layout_span="2" 该控件占据2列
说明:一个控件也可以同时具备这两个特性。
AbsoluteLayout
绝对布局指定确切位置(x / y坐标)在其子视图。绝对布局不够灵活,比其他类型非绝对定位布局更难维护。
AbsoluteLayout 属性
以下是具体AbsoluteLayout 的重要属性:
属性描述
android:id 这是唯一标识的布局的ID。
android:layout_x 这指定视图的x坐标。
android:layout_y 这指定视图的y坐标。
改控件已弃用,建议使用RelativeLayout.
FrameLayout
FrameLayout帧布局是最简单的布局之一,采用帧布局的容器中无论放入多少个控件,控件默认情况下左上角都对齐到容器的左上角,如果控件一样大,同一时间只能见到最上面的。
控件可以通过android:layout_gravity属性控制自己在父控件中的位置.
ListView
ListView是一个组几个项目,并显示在垂直滚动列表。列表项会使用适配器自动插入到列表中,从内容源,如数组或数据库。
ListView属性
以下是具体的GridView中的重要属性:
属性描述
android:id 这是唯一标识的布局的ID。
android:divider 这是可拉伸或颜色列表项的绘制。
android:dividerHeight 这指定分频器的高度。这可能是px, dp, sp, in 或 mm。
android:entries 指定引用数组的资源,将用于填充ListView。
android:footerDividersEnabled 当设置为false,在ListView将不绘制每个页脚视图之前的分隔。默认值是true。
android:headerDividersEnabled 当设置为false,在ListView将不绘制每个标题视图之后的分隔。默认值是true。
ArrayAdapter
当数据源是一个数组,可以使用这个适配器。默认情况下,ArrayAdapter创建一个视图,每个阵列项目的每个项目上调用toString()并放置在TextView 作为内容。要显示在ListView一个字符串数组,初始化一个新的ArrayAdapter使用构造函数来指定每个字符串的字符串数组的布局:
ArrayAdapteradapter =newArrayAdapter(this,
R.layout.ListView,
StringArray);
下面是此构造函数的参数:
第一个参数 this 是应用程序上下文。在大多数的情况下使用this 。
第二个参数是定义在XML文件中的布局,它是 TextView 数组中的每个字符串。
最后一个参数是一个数组,字符串将被填充到文本视图。
创建的数组适配器,然后简单地调用ListView 对象 setAdapter() 方法,如下:
ListViewlistView =(ListView)findViewById(R.id.listview);
listView.setAdapter(adapter);
总结:今天学习TableLayout . FrameLayout .ListView。其中TableLayout用于多行,每行可以自定义控件,FrameLayout用于多图层。
ListView相当于iOS中的Tableview,复杂点的cell需要自定义,同时要考虑数据(Adapter)格式和布局(layout).今天ArrayAdapter的构造方法没有学会,明天继续。