其他分享
首页 > 其他分享> > 使用View实现相册照片列表页面

使用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