使用View实现相册照片列表页面

2024-08-21 16:32

本文主要是介绍使用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};@Overrideprotected 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

这篇关于使用View实现相册照片列表页面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093682

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr