《Android UI基础教程》——1.2节Android 应用程序的基本结构

简介:

本节书摘来自异步社区《Android UI基础教程》一书中的第1章,第1.2节Android 应用程序的基本结构,作者 【美】Jason Ostrander,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 Android 应用程序的基本结构
Android UI基础教程
在开始一个Android项目时,Eclipse IDE已经为你创建了一个初始的工程结构。这个工程包含你需要用来构建应用程序的所有所需元素,你也应把所有的工作内容放置于这个工程中。尽管可以创建一个应用程序之间的代码共享的库工程,但对于绝大多数应用程序来说,并没有这个必要。本节将会介绍基本的工程文件夹结构以及应该在哪里放置代码、布局文件和素材。

1.2.1 文件夹结构
对在Package Explorer的示例工程文件夹的基础上进行扩展,并仔细观察工程结构。Android使用的是标准的Java应用程序的布局。表1.1总结了工程结构。


905af9ccf92c8eefaf073cf6ab946f39435ec405

1.2.2 Android Manifest
Android manifest包括应用程序的结构和功能的所有信息。它包括应用程序所使用的所有活动、所提供的服务、任何通过内容提供商可访问的数据库内容以及它处理的任何意图。

`<?xml version=``"``1.0``"`` encoding=``"``utf-8``"``?>`
`<manifest xmlns:android=``"``http://schemas.android.com/apk/res/android``"`
` `` ``       package=``"``com.example``"`
` `` ``       android:versionCode=``"``1``"`
` `` ``       android:versionName=``"``1.0``"``>`
` `` ``  <uses-sdk android:minSdkVersion=``"``14``"`` />`
` `` ``  <uses-feature android:name=``"``android:hardware.bluetooth``"``/>`
` `` ``  <supports-screens android:anyDensity=``"``true``"``/>`
` `` ``  <application android:icon=``"``@drawable/icon``"`
` `` ``  ``→`` android:label=``"``@string/app`_`name``"``>`
` ``    ``  <activity android:name=``"``.ExampleActivity``"`
` `` ``   `` ``  ``    ``android:label=``"``@string/app`_`name``"``>`
` `` ``  ``   ``<intent-filter>`
` `` ``   `` ``  ``    ``<action android:name=``"``android.intent.action.MAIN``"`` />`
` `` ``   `` ``   `` ``  <category android:name=``"``android.intent.category.`
` `` ``   `` ``   `` ``  ``→`` LAUNCHER``"`` />`
` `` ``   `` ``   `` ``  </intent-filter>`
` `` ``   `` `` </activity>`
` ``   ``</application>`
`</manifest>`

在该manifest中你可以声明应用要正常运行所需的硬件功能。举个例子,如果应用需要触屏设备才能够正常运转,那么在manifest中需要包括进下面这行:

`<uses-feature android:name=``"``android.hardware.touchscreen``"`
`→ ``android:required=``"``true``"`` />`

按照应用所需来声明硬件功能使得Android Market可以根据用户的硬件配置来合理地筛选应用。这样没有触屏手机的用户就不会下载到要求有触摸屏才能正常运行的应用。

你应该努力使应用程序尽可能广泛地兼容。列出应用需要使用的功能,通过代码来动态决定它们的可用性并使得降低用户体验的方式尽可能保持优雅。

在该manifest中你同样要声明应用所需使用的权限。与硬件要求不同,所有运行应用所需的权限声明都必须包括在manifest中。不存在有可选的声明。

注意: 用户对于要求权限过于宽泛的应用毫不留情。尤其是对于那些要求位置信息的应用。仔细考虑应用的权限需求,不要请求多余的权限。

应用程序使用的图标和标签也要在manifest中声明。你可以把这些属性赋给manifest中的许多XML元素。最重要的是顶层的<application>元素。它决定应用程序将如何在主界面以及应用页展示。然而,图标/标签的组合并不只是适用于<application>元素。你可以把它们应用于权限元素之上,这将会在用户确认安装应用程序时展示出来。你也可以把它们置于<activity>元素,用户将会在进程监视器中看到它们。这些元素能够被任何子组件继承。因此,如果已经设置好<application>图标和标签,但是<activity>和<intent>的图标和标签并没有设置,那么这些元素将会默认使用<application>的图标和标签。此设置允许你使用特定组件的图标和标签来告知用户应用程序的功能。

最后,manifest是声明所支持的Android API版本的地方。正确地声明API级别很重要,因为尝试引用不支持的API将会导致你的应用程序崩溃。这也能很好地防止应用程序被安装于未测试过的新的API版本。表1.2列出了更多关于API级别的信息。


969184a80ed74e4f118a92c7a4603fa3a46f0ef9

1.2.3 资源
Android应用在res/文件夹中存储所有的资源。什么是资源?基本上,所有不是Java代码的都是资源。图像、布局文件、应用程序字符串、局部字符串、主题甚至动画都放在res/文件夹中。Android使用目录结构来隔离资源使得在不同设备配置上都能使用。在Hello World应用中,有3个drawable文件夹:drawable-ldpi、drawable-mdpi和 drawable-hdpi,分别代表低、中、高密度的资源。运行时,Android系统会基于设备硬件选择合适的资源。如果没有资源能够匹配,它将会选择最接近的匹配资源。在第3章中对此将会有深入讲解。

在布局中使用的常量值都放置在res/values/文件夹下。你应当把所有的颜色、尺寸规格、风格以及字符串放置在此文件夹中。在示例的Hello World应用中,有一个单个的strings.xml文件包含所有的应用中用户可见的字符:

`<?xml version=``"``1.0``"`` encoding=``"``utf-8``"``?>`
`<resources>`
`    <string name=``"``hello``"``>Hello World, ExampleActivity!</string>`
` `` ``  <string name=``"``app`_`name``"``>Example</string>`
`</resources>`

你不能使用Java代码或者XML布局文件中的字符串常量。任何用户可见的字符串都需要在strings.xml文件中声明。这使得你的资源随后进行本地化更加容易。在应用中可通过字符串元素的名称属性引用这些字符串。

res/layout/文件夹也包含声明应用程序布局的XML文件。Android UI可以通过XML或者Java代码创建。推荐使用XML构建布局,因为它能够很好地把UI和应用逻辑分离开。不同的文件夹名代表不同的布局文件,以适配不同配置的设备。

相关文章
|
1月前
|
前端开发 编解码 数据格式
浅谈响应式编程在企业级前端应用 UI 开发中的实践
浅谈响应式编程在企业级前端应用 UI 开发中的实践
22 0
浅谈响应式编程在企业级前端应用 UI 开发中的实践
|
1月前
|
消息中间件 安全 数据处理
Android为什么不能在子线程更新UI
Android为什么不能在子线程更新UI
28 0
|
1月前
|
编解码 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)1
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
48 1
|
1月前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
27 2
|
4天前
|
前端开发 搜索推荐 UED
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
【4月更文挑战第30天】探索Flutter的高级UI组件,如`TabBar`、`Drawer`、`BottomSheet`,提升应用体验和美观度。使用高级组件能节省开发时间,提供内置交互逻辑和优秀视觉效果。示例代码展示了如何实现底部导航栏、侧边导航和底部弹出菜单。同时,自定义组件允许个性化设计和功能扩展,但也带来性能优化和维护挑战。参考Flutter官方文档和教程,深入学习并有效利用这些组件。
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话
【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话
25 0
|
12天前
|
Java Android开发
Android Mediatek 禁用拨号应用的部分UI显示
Android Mediatek 禁用拨号应用的部分UI显示
12 0
|
20天前
|
编解码 Android开发 UED
安卓UI/UX设计原则:打造引人入胜的用户体验
【4月更文挑战第13天】本文探讨了安卓UI/UX设计的关键原则,包括一致性、简洁性、反馈、清晰性、效率和适应性。一致性要求视觉和行为保持一致,利用系统UI;简洁性减少用户行动,简化导航;反馈需即时且明确;清晰性强调表达清晰,布局有序;效率关注性能优化和任务简化;适应性涉及多设备适配和用户多样性。遵循这些原则,可创建出色应用,提供无缝用户体验。设计应持续迭代,适应技术发展和用户需求。
|
24天前
|
XML 移动开发 Android开发
构建高效安卓应用:采用Jetpack Compose实现动态UI
【4月更文挑战第10天】 在现代移动开发中,用户界面的流畅性和响应性对于应用的成功至关重要。随着技术的不断进步,安卓开发者寻求更加高效和简洁的方式来构建动态且吸引人的UI。本文将深入探讨Jetpack Compose这一革新性技术,它通过声明式编程模型简化了UI构建过程,并提升了性能与跨平台开发的可行性。我们将从基本概念出发,逐步解析如何利用Jetpack Compose来创建具有数据动态绑定能力的安卓应用,同时确保应用的高性能和良好用户体验。
19 0
|
26天前
|
XML Java Android开发
Android之UI基础控件
Android之UI基础控件