使用View实现相册照片列表页面
作者:互联网
1 View概述
1.1 View
View表示视图,负责提供绘制和事件处理的方法。View类及其子类的相关属性,既可以在xml布局文件中设置,也可以通过成员方法动态设置。
View类常用的属性及方法如表1:
xml属性 | 成员方法 | 描述 |
android:background | setBackgroundResource(int) | 设置背景 |
android:clickable | setClickable(boolean) | 设置是否响应单击事件 |
android::elevation | setElevation(float) | 设置z轴深度 |
android:focusable | setFocusable(boolean) | 设置是否可以获取焦点 |
android:id | setId(int) | 设置组件唯一标识符ID |
android:longClickable | setLongClickable(boolean) | 设置是否响应长单击事件 |
android:minHeight | setMinimumHeight(int) | 设置最小高度 |
android:minWidth | setMinimumWidth(int) | 设置最小宽度 |
android:padding | setPaddingRelative(int,int,int,int) | 设置4个边的内边距 |
android:paddingBottom | setPaddingRelative(int,int,int,int) | 设置底边的内边距 |
android:paddingTop | setPaddingRelative(int,int,int,int) | 设置顶边的内边距 |
android:paddingStart | setPaddingRelative(int,int,int,int) | 设置左边的内边距 |
android:paddingEnd | setPaddingRelative(int,int,int,int) | 设置右边的内边距 |
android:paddingLeft | setPadding(int,int,int,int) | 设置左边的内边距 |
android:paddingRight | setPadding(int,int,int,int) | 设置右边的内边距 |
android:visibility | setVisibility(int) | 设置View的可见性 |
表1 View类常用的xml属性及对应的方法
1.2 ViewGroup
ViewGroup是一个抽象类,实际用ViewGroup的子类,如后面的布局管理器。
(1)ViewGroup.LayoutParams
封装了布局的位置,高和宽。
xml属性 | 描述 |
android:layout_height android:layout_width | 参数可以使用精确的数值,或 FILL_PARENT,MATCH_PARENT(表示与父容器相同) WRAP_CONTENT(表示包裹其自身的内容) |
(2)ViewGroup.MarginLayoutParams
用于控制其子组件的外边距。它支持的常用属性如表2:
xml属性 | 描述 |
android:layout_marginBottom | 设置底外边距 |
android:layout_marginTop | 设置顶外边距 |
android:layout_marginStart | 设置左外边距(Android4.2) |
android:layout_marginEnd | 设置右外边距(Andriod4.2) |
android:layout_marginLeft | 设置左外边距 |
android:layout_marginRight | 设置右外边距 |
表2 ViewGroup.MarginLayoutParams支持的常用属性
ViewGroup中除了可以包含View,还可以再次包含ViewGroup,这应用了组合设计模式(Composite design),如图3:
图3 View层次结构
2 控制UI界面
2.1 使用xml布局文件控制
(1)创建xml布局文件
(2)代码调用
setContentView(R.layout.activity_main);
2.2 使用代码控制
(1)创建布局管理器,如帧布局管理器等。
(2)创建具体的组件,如TextView等。
(3)将创建的组件添加到布局管理器中。
2.3 使用xml布局文件和代码控制
通常把变化小的组件放在xml布局文件中,把变化大的组件用代码控制。
2.4 使用自定义View控制
我们可以继承View来开发自己的View组件。
(1)创建View子类,重写构造方法。
(2)根据需要重写其他方法。
(3)创建并实例化自定义View类,并将其添加到布局管理器中。
3 布局管理器
(1)相对布局管理器
通过相对定位的方式来控制组件的位置。
(2)线性布局管理器
在垂直或水平方向依次摆放组件。
(3)帧布局管理器
所有的组件会摆放在左上角,逐个覆盖。
(4)表格布局管理器
使用表格的方式按行,列来摆放组件。
(5)网格布局管理器
可以实现跨行或跨列摆放组件。
布局管理器类图如图4:
图4 布局管理器类图
3.1 相对布局管理器
<RelativeLayout>标记基本语法:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性列表
>
</RelativeLayout>
RelativeLayout支持的xml属性如表5:
xml属性 | 描述 |
android:gravity | 设置布局管理器中各子组件的对齐方式 |
android:ignoreGravity | 指定哪个组件不受gravity的影响 |
表5 RelativeLayout支持的xml属性
RelativeLayout.LayoutParams支持的xml属性如表6:
xml属性 | 描述 |
android:layout_above | 指定该组件位于那个组件的上方 |
android:layout_below | 指定该组件位于那个组件的下方 |
android:layout_alignBottom | 指定该组件与哪个组件的下边界对齐 |
android:layout_alignTop | 指定该组件与哪个组件的上边界对齐 |
android:layout_alignLeft | 指定该组件与哪个组件的左边界对齐 |
android:layout_alignRight | 指定该组件与哪个组件的右边界对齐 |
android:layout_alignParentBottom | 指定该组件是否与布局管理器底端对齐 |
android:layout_alignParentTop | 指定该组件是否与布局管理器顶端对齐 |
android:layout_alignParentLeft | 指定该组件是否与布局管理器左边对齐 |
android:layout_alignParentRight | 指定该组件是否与布局管理器右边对齐 |
android:layout_centerHorizontal | 指定该组件是否位于布局管理器水平居中的位置 |
android:layout_centerInParent | 指定该组件是否位于布局管理器的中央位置 |
android:layout_centerVertical | 指定该组件是否位于布局管理器垂直居中的位置 |
android:layout_toLeftOf | 指定该组件位于哪个组件的左侧 |
android:layout_toRightOf | 指定该组件位于哪个组件的右侧 |
表6 RelativeLayout.LayoutParams
3.2 线性布局管理器
纵向排列的称为垂直线性布局管理器,横向排列的称为水平线性布局管理器。
<LinearLayout>标记的基本语法格式:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性列表
>
</LinearLayout>
LinearLayout支持的常用xml属性如表7:
xml属性 | 描述 |
android:orientation | 设置排列方式 |
android:gravity | 设置组件显式位置 |
android:background | 设置背景 |
表7 LinearLayout支持的常用xml属性
3.3 帧布局管理器
在帧布局管理器中,每加入一个组件,都将创建一个空白的区域,称为一帧。这些帧会被放置在屏幕的左上角,即帧布局是从屏幕的左上角(0,0)开始布局。多个组件层叠排序,后面的组件覆盖前面的组件。
<FrameLayout>标记的基本语法格式:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性列表
>
</FrameLayout>
FrameLayout支持的常用xml属性如表8:
xml属性 | 描述 |
android:foreground | 设置该帧布局容器的前景图像 |
android:foregroundGravity | 设置前景图像的显示位置 |
表8 FrameLayout支持的常用xml属性
3.4 表格布局管理器
在表格布局管理器中,可添加多个<TableRow>标记,每个<TableRow>标记占用一行。
在表格布局管理器中,列可以被隐藏,也可以被设置伸展,还可以设置强制收缩。
<TableLayout>基本语法格式如下:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性列表
>
<TableRow 属性列表> 需要添加的组件 </TableRow>
...
</TableLayout>
TableLayout继承自LinearLayout,除了支持LinearLayout的xml属性,还支持下表9的xml属性:
xml属性 | 描述 |
android:collapseColumns | 设置被隐藏的列的列序号 |
android:shrinkColumns | 设置被收缩的列的列序号 |
android:stretchColumns | 设置被拉伸的列的列序号 |
表9 TableLayout支持的xml属性
3.5 网格布局管理器
网格布局管理器中,屏幕被虚拟的细线划分为行,列和单元格,每个单元格放置一个组件,却这个组件可以跨行或跨列摆放。
<GridLayout>标记的基本语法格式如下:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性列表
>
</GridLayout>
GridLayout支持的xml属性如表10:
xml属性 | 描述 |
android:columnCount | 指定网格的最大列数 |
android:rowCount | 指定网格的最大行数 |
android:orientation | 指定排列方式 |
android:alignmentMode | 指定对齐模式 |
表10 GridLaytout支持的xml属性
GridLayout.LayoutParams支持的xml属性如表11:
xml属性 | 描述 |
android:layout_gravity | 设置组件显式位置 |
android:layout_column | 指定该子组件位于网格的第几列 |
android:layout_columnSpan | 指定该子组件横向跨几列 |
android:layout_columnWeight | 指定子组件在水平方向上的权重 |
android:layout_row | 指定该子组件位于网格的第几行 |
android:layout_rowSpan | 指定该子组件纵向跨几行 |
android:layout_rowWeight | 指定子组件在垂直方向上的权重 |
表11 GridLayout.LayoutParams支持的xml属性
网格布局管理器与表格布局管理器的区别如下:
(1)网格布局管理器可以跨行或跨列,表格布局管理器只能跨列。
(2)网格布局管理器可以实现一行占满后的组件自动换行,表格布局管理器超出的组件不会被显式。
4 使用View实现相册照片列表页面
PhotosView:
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private ImageView[] img=new ImageView[12];
private int[] imagePath=new int[]{
R.mipmap.img01,R.mipmap.img02,R.mipmap.img03,R.mipmap.img04,
R.mipmap.img05,R.mipmap.img06,R.mipmap.img07,R.mipmap.img08,
R.mipmap.img09,R.mipmap.img10,R.mipmap.img11,R.mipmap.img12
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridLayout layout=(GridLayout)findViewById(R.id.layout);
for(int i=0;i<imagePath.length;i++){
img[i]=new ImageView(MainActivity.this);
img[i].setImageResource(imagePath[i]);
img[i].setPadding(2, 2,2, 2);
// 设置图片的宽度和高度
ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(232,136);
// 为ImageView组件设置布局参数
img[i].setLayoutParams(params);
// 将ImageView组件添加到布局管理器中
layout.addView(img[i]);
}
}
}
https://github.com/hanyuhang-hz/android-demos
标签:xml,管理器,相册,int,组件,layout,android,View,页面 来源: https://blog.csdn.net/u012906122/article/details/122801215