Android编写程序界面(控件+布局+大量实例)

2024-03-26 13:50

本文主要是介绍Android编写程序界面(控件+布局+大量实例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


96 
叶琛_  关注
2016.10.02 11:45*  字数 2614  阅读 11559 评论 15

文/叶琛

作为软件开发者,如果希望自己的软件受到用户喜欢和广泛使用,就应该意识到界面设计和功能开发同样重要。

从实际经验来看,一个优秀的软件,首先得满足对用户友好的操作界面。界面美观的应用程序可以增大用户粘性,同时吸引更多新用户。

阅读我的前一篇文章《Android开发(一)|第一个Android项目》,相信读者对于创建安卓项目已不是问题,接下来要做的第二件事就是在空白活动的基础上编写程序界面。

Android为我们提供了大量UI开发工具,合理使用它们,就可以编写出各式各样的漂亮界面。

例如简单的机票查询界面:

机票信息查询

创建好一个MainActivity活动,项目命名为AllTest(可随意),然后我们来实际开发一个简单美观的程序界面。


1、 如何编写程序界面

Eclipse(本文选用)和Android Stdio都有可视化界面编辑工具,可以直接拖拽控件并在视图中修改属性。不过初学时并不推荐这种方法。而且这种方式作出的界面屏幕适配性一般较差。

我们采用最基本的方式实现:编写XML代码。每当新建一个活动,ADT会自动帮你生成一个.XML文件,我们可以按需要修改增添。

.XML位置

2、 常见控件使用方法

借助大量的UI控件和合理的排版规划,我们可以非常轻松的编写出想要的界面效果。

可以通过一张图片了解Android控件的继承关系:

所有控件继承自android.View

1) TextView

TextView是Android最简单的控件。它主要用于在界面上显示一段文本信息(但不允许用户修改内容)。

我们将activity_main.xml中的代码修改如下:

定义TextView

android:id即给控件定义一个id,之后通过这个id就能定位到该控件。

Android中所有控件都有这两个属性:android:layout_width|android:layout_height,指定了控件的宽度和高度。可选值为match_parent/wrap_content,前者表示让当前控件大小和父布局一致;后者表示由控件内容决定当前控件大小(即刚好包含里面的内容)。

android:text表示文本框显示的内容。TextView还有很多属性可以设置,例如颜色(android:textColor 以十六进制表示)、文字对齐方式(android:gravity)等等。各控件的属性不用特意记,需要时查阅文档即可。

关于布局,我们这里采用LinearLayout线性布局方式,待会再细说。

AllTest右键→Run as→Android Application启动模拟机,得到如图界面:

TextView效果

2) Button

Button是程序和用户交互的一个重要控件。它可配置的属性基本和TextView相同。

我们可以在activity_main.xml中这样加入Button:

定义Button

更新Android Application,得到如下效果:

Button效果

为什么按钮占据整行了呢?因为它的属性android:layout_width被我们设置为match_parent,和父布局LinearLayout的一样。

在主活动中为按钮注册一个监听器,当点击按钮将执行onClick()方法,完成我们需要的操作。具体实现过程将在本系列第四篇文章中,和活动数据的传递一起讲述。现在我们先纯粹显示一个按钮。

3) EditText

EditText是程序与用户进行交互的另一重要控件,它允许用户在控件中输入和编辑内容,并且可以在程序中对这些内容进行处理。

我们发微博、聊QQ,都将使用到它。现在在界面中加入EditText,继续修改activity_main.xml中的代码:

定义EditText

android:hint属性指定了一段提示性文本。android:maxLines指定EditText最大行数为两行,当输入的内容超过两行,文本会向上滚动,EditText不再拉伸。

得到如下效果:

EditText效果

到这儿我们能总结出Android控件的使用规律了:基本上用法大同小异,给控件定义一个id,再指定宽度、高度,然后加些控件特有的属性就可以了。使用XML来编写界面一点都不难。

4)ImageView

ImageView是用于在界面上展示一张图片的控件,它能让我们的程序界面变得更加丰富多彩。

drawable文件夹下已自动生成一张ic_launcher.png图片,我们先在界面上展示它。修改activity_main.xml中的代码:

定义ImageView

这里使用android:src属性给ImageView指定了一张图片(格式不限),因为图片宽高均设为wrap_content,所以无论图片多大都能完整展示出来。重新运行程序:

ImageView效果

5)ListView

ListView绝对算Android最常用控件之一,它允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据会滚动出屏幕。

回忆一下,我们每天都在使用这个控件。例如翻阅微博、查看手机联系人等等。

不过比起前面几种控件,ListView用法相对复杂很多。笔者将会在本系列第三篇文章中单独对ListView进行详细讲解。


除了上面提到的常见控件,还有ProgressBar(进度条)、AlertDialog(弹出式对话框)、AnalogClock(时钟)等等,今后在不断学习过程中会接触更多的控件。

当系统控件不够用时,我们还可以自定义控件以达到目的。限于篇幅这儿先不演示啦。

3、 四种基本布局

一个丰富的界面常要有很多个控件组成,如何才能让各个控件都有条不紊地摆放在界面上?这就需要借助布局。

布局是一种可用于放置很多控件的容器,它能按一定规律调整内部控件的位置,从而编写出精美界面。

Android中一共有四种基本布局,我们来逐一了解:

(1) LinearLayout线性布局

这个布局会将它所包含的控件在线性方向上依次排列。android:orientation属性指定了排列方向,之前展示控件时就采用了这种布局的“vertical”垂直方向,所有控件排成了一列。

LinearLayout布局

如果指定的是“horizontal”,控件就会在水平方向上排列。

水平排列布局

(2) RelativeLayout相对布局

这是另一常用布局,相比LinearLayout显得更加随意。它可以通过相对定位的方式让控件出现在布局的任何位置。

RelativeLayout属性比较多,但都有规律可循,并不难理解记忆。

我们继续通过实例体会,修改activity_main.xml中的代码:

RelativeLayout布局

类似android:layout_alignParentLeft的属性可能之前没接触过,可它的名字已经完全说明了它的作用——控件相对于父布局左对齐。重新运行程序:

RelativeLayout效果

上例控件都是相对于父布局进行定位的,还可以相对于控件进行定位,只要改变相应属性,具体可参见下表,不再赘述。

RelativeLayout的部分属性

(3) FrameLayout

相对于前两种布局,FrameLayout可简单多了。因为它没有任何定位方式,所有的控

件都会摆放在布局的左上角。因此应用场景也少了很多。很简单吧!这里我们不再演示。

(4) TableLayout

TableLayout允许我们使用表格的方式来排列控件。

表格自然会有行和列。设计表格时我们尽量让每一行拥有相同列数,这样的表格是最简单的。当表格的某行一定要有不相等列数时,可以通过合并单元格的方式处理。

通过一个登录界面的实例化来使用这个布局。可以这样修改activity_main.xml中的代码:

TableLayout布局
TableLayout布局(接上)


在TableLayout中每加入一个TableRow,表示在表格中添加一行;在TableRowt每加入一个控件,就表示在该行中加入一列。

在TableLayout中我们无法指定控件宽度,但是可以通过android:stretchColumns属性解决。它允许将TableLayout中的某一列拉伸,以达到自适应屏幕宽度的作用。

android:stretchColumns属性

将其值指定为1,如果表格不能完全占满屏宽,就拉伸第二列。没错!“1”就是拉伸第二列,“0”就是拉伸第一列。

运行这个程序:

TableLayout布局效果

而关于点击按钮的消息响应以及用户名、密码的数据存储这里暂不讲解,重点示范TableLayout布局的使用。


布局还可以嵌套布局,以形成层次分明、功能健全的精美界面。activity_main.xml的代码并不复杂:

LinearLayout布局嵌套

回头看之前的机票界面,就是通过LinearLayout布局嵌套加上简单、常用控件完成的:

简单的机票信息界面

现在的你,完全可以做到这样的效果甚至比它更精美。

如果你新编出一个精美的界面,欢迎留言或私信共享。如果编程中出现解决不了的困惑,我会尽最大努力帮助你解答。

最后一个tip:当我们开发一个项目时,强烈建议把其它不相关的project暂时全部关闭,避免修改代码时改错地方:)

BTW:接下来还会带来一系列的安卓开发教程文章,您的支持是我最大的持久力!


作者:叶琛

一个痴迷旅行的 IT程序狗

这篇关于Android编写程序界面(控件+布局+大量实例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk