本节书摘来自异步社区《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总结了工程结构。


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级别的信息。


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

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

  1. 《Android UI基础教程》——2.1节创建一个应用

    本节书摘来自异步社区<Android UI基础教程>一书中的第2章,第2.1节创建一个应用,作者 [美]Jason Ostrander,更多章节内容可以访问云栖社区"异步社区&q ...

  2. Android零基础入门第25节:最简单最常用的LinearLayout线性布局

    原文:Android零基础入门第25节:最简单最常用的LinearLayout线性布局 良好的布局设计对于UI界面至关重要,在前面也简单介绍过,目前Android中的布局主要有6种,创建的布局文件默认 ...

  3. Android零基础入门第44节:ListView数据动态更新

    2019独角兽企业重金招聘Python工程师标准>>> 经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据 ...

  4. Android零基础入门第38节:初识Adapter

    2019独角兽企业重金招聘Python工程师标准>>> 在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter. 一.了解MV ...

  5. Android零基础入门第65节:RecyclerView分割线开发技巧

    2019独角兽企业重金招聘Python工程师标准>>> 在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习Recycle ...

  6. Android零基础入门第40节:自定义ArrayAdapter

    原文:Android零基础入门第40节:自定义ArrayAdapter ListView用起来还是比较简单的,也是Android应用程序中最重要的一个组件,但其他ListView可以随你所愿,能够完成 ...

  7. Android零基础入门第20节:CheckBox和RadioButton使用大全

    原文:Android零基础入门第20节:CheckBox和RadioButton使用大全 本期先来学习Button的两个子控件,无论是单选还是复选,在实际开发中都是使用的较多的控件,相信通过本期的学习 ...

  8. Android零基础入门第24节:自定义View简单使用

    Android零基础入门第24节:自定义View简单使用 原文:Android零基础入门第24节:自定义View简单使用 当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义Vi ...

  9. Android零基础入门第33节:Android事件处理概述

    原文:Android零基础入门第33节:Android事件处理概述 通过对Android基本组件的学习,也有接触少部分Android的事件处理,比如按钮的点击事件.选框的状态切换事件. 一.Andro ...

最新文章

  1. virtualenv 在windows下的绿化方法
  2. 自动驾驶寒冬与否,关键看“芯”
  3. grep -v、-e、-E
  4. 2020 阿里云原生实战峰会即将开幕 云原生落地的正确姿势
  5. redis报错(error) LOADING Redis is loading the dataset in memory
  6. initialize方法与load方法比较
  7. 每日一笑 | 在俄罗斯人眼里,没有什么是胶带解决不了的
  8. windows环境下C语言socket编程
  9. java8 stream 分组_Java 8 中 Map 骚操作之 merge() 的用法
  10. java http 返回json_java发起http请求获取返回的Json对象方法
  11. C++中依赖受限名称定义编译无法通过的问题
  12. 怎么调整矩形边框宽度_PPT内容太少,怎么做才不会单调?
  13. 自动编码机(Autodencoder)
  14. ftp服务器下载,细数五款好用的ftp服务器下载软件
  15. 文本检测综述(2017 ~ 2021 持续更新)
  16. 安利三款好用的音频剪辑软件,值得收藏
  17. 《刻意练习:从新手到大师》读书笔记 觉得别人总结的不错拿来学习备份
  18. 错误方法修改用户名后,开机提示无法登录到你的账户的正确解决方法
  19. sklearn中的决策树(分类)
  20. Piggy-Bank(背包)

热门文章

  1. java连续输入_java – 要求用户进行多次输入
  2. windows winrar 指令_【转】winrar命令行详解
  3. Xcode下载安装问题
  4. cellphonedb 及其可视化
  5. 实践操作--云端深度学习工作站配置指南(转)
  6. 北斗导航 | Satellite Communications Toolbox——MATLAB2021a卫星通信工具箱(附代码)
  7. 手电筒android studio,Android Studio:手电筒关闭时崩溃
  8. JC法在matlab,自贡自流井启闭机--四川闸门厂家产品中心
  9. c# mysql timeout expired_C#百万数据查询出现超时问题的解决方法
  10. C++ 标准库类型 set