《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和应用逻辑分离开。不同的文件夹名代表不同的布局文件,以适配不同配置的设备。

相关文章
|
7月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
313 64
|
2月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
91 4
|
11月前
「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的滑块控制器应用。
336 78
「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
|
9月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
527 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
本篇将带你实现一个虚拟音乐控制台。用户可以通过界面控制音乐的播放、暂停、切换歌曲,并查看当前播放的歌曲信息。页面还支持调整音量和动态显示播放进度,是音乐播放器界面开发的基础功能示例。
414 80
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
|
10月前
「Mac畅玩鸿蒙与硬件51」UI互动应用篇28 - 模拟记账应用
本篇教程将介绍如何创建一个模拟记账应用,通过账单输入、动态列表展示和实时统计功能,学习接口定义和组件间的数据交互。
345 68
「Mac畅玩鸿蒙与硬件51」UI互动应用篇28 - 模拟记账应用
|
11月前
|
流计算 UED
「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。
342 69
「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
|
11月前
|
数据处理
「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
本篇将带你实现一个评分统计工具,用户可以对多个选项进行评分。应用会实时更新每个选项的评分结果,并统计平均分。这一功能适合用于问卷调查或评分统计的场景。
309 65
「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
|
9月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
581 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
10月前
|
人工智能 自然语言处理 API
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
UI-TARS Desktop 是一款基于视觉语言模型的 GUI 代理应用,支持通过自然语言控制电脑操作,提供跨平台支持、实时反馈和精准的鼠标键盘控制。
2887 17
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程

热门文章

最新文章