Android SDK 上手指南||第四章 应用程序结构

第四章 应用程序结构

本教程将主要以探索与了解为主要目的,但后续的系列文章则将进一步带大家深入学习如何创建用户界面、响应用户交互操作以及利用Java编排应用逻辑。我们将专注于大家刚刚开始接触Android开发时最常遇到的项目内容,但也会同时涉及一部分已经存在于应用结构当中的其它一些元素。在今天的文章中,我们不会对这些额外元素进行深入探讨。总而言之,了解关于Android应用的基础创建知识,这就是我们今天要完成的任务。 

1. 源文件

第一步

打开Eclipse并在Package Explorer当中查找我们已经创建完成的项目。在“src”文件夹里,大家应该会看到设置项目所命名的项目包。包中应该包含我们的Activity类文件,这也是要在编辑器中打开的内容。源文件夹保存着我们在开发Android应用时所要用到的全部Java文件。

4.1android_project_folders

每当我们创建一个项目时,都会创建一个用于容纳各Java类文件的包。一款应用程序可能拥有不止一个包,而且每个包当中也可能容纳着多个类文件。这些类文件中的处理代码能够将我们的应用呈现给用户、响应用户的交互操作并执行任何的必要处理。从实质上看,类文件是在根据面向对象概念模型划分与应用程序相关的代码。

我们将在后续文章中进一步讨论关于Java的概念以及对应实践。在今天的教程内,大家只需理解一个Java应用会将各类处理任务拆分成一定数量的对象。每个对象都由一个类声明来定义,这在应用程序中通常是一个独立的文件,不过也可以被嵌套在其它类文件当中。一个对象基本上就是一大段代码,其中承载着与应用程序相关的某项功能的一部分。类文件中的代码能够引用应用程序中的其它类或者应用程序中的其它包。

在大家着手进行应用程序开发时,首先需要向源文件夹中的包中添加Java类。一个向用户提供用户界面的典型Android应用将拥有至少一个Activity文件,应用中的不同屏幕显示内容还要用到更多Activity类。其它一些类型的应用,例如工具程序或者服务,则采用不同的结构。大家最好首先关注Activity UI这种类型的应用程序,并在熟练掌握之后再接触其它应用类型。

第二步

现在查看新应用中的Activity类文件。我们会在本系列教程的后续文章中进一步探讨Activity代码,因此目前大家不用太过关注细节。今天我们主要面向应用中的主Activity,它会在应用启动后同时开始生效。大家的应用也可能会启动其它一些用于用户交互的Activity。在我们创建自己的项目时,Eclipse会对应用进行设置并将主Activity作为主类——它在项目清单当中也将被作为主Activity进行显示,我们稍后会看到。

在主Activity类当中,大家会看到onCreate方法,其中包含的代码将在Activity被创建——也就是应用程序启动时开始执行。在该方法中,大家会看到以下代码行:

setContentView(R.layout.activity_main);

在我们启动项目之后,这一行的内容用于指定我们所创建的布局文件,告诉Android将其作为内容视图。这意味着无论布局文件中包含什么样的内容,都将在该Activity显示在屏幕上时呈现给用户。

我们将在稍后进一步探讨相关话题,目前暂时需要将注意力集中在“R.layout.activity_main”语法上。这就是我们的Java代码引用应用程序资源的方式。我们将利用类似的语法通过资源的ID值对其进行引用,例如图片及数据值等资源也可以通过这种方式实现引用。其中的“R”代表应用资源,后面的部分则用于指定保存在“res/layout”目录下的条目类型——在这里就是布局。这些资源最终要根据其名称进行识别——对于示例中的布局,使用的就是文件名。由此推断,我们要使用的语法就成了“R.type.name”。在我们开始编程之后,各位就会开始使用该语法。

在本系列的后续文章中,我们将向Activity类文件中添加代码以实现用户交互。现在打开应用中的“res”文件夹,大家会在其中找到多个子文件夹。这些文件夹是由Eclipse与ADT在我们启用新Android项目后默认创建而成的,不过我们可能还需要为不同类型的资源添加其它一些目录。

2. 布局资源

正如我们已经看到,项目创建后所生成的布局文件会保存在“res/layout”文件夹中。如果某款应用拥有多个Activity屏幕,那么一般会为每个屏幕保留一个独立的布局文件。大家可能还会将布局文件用于个别UI组件。当大家为Activity创建类文件时,需要如上所述利用setContentView进行布局设置。除此之外,大家也可以通过Java代码进行布局设置——这算是种备选方案。在我们的示例中,布局设置是在应用执行时动态生成的。不过利用XML的优势在于,我们可以在界面设计工作中直观感受布局方案的视觉效果。

在应用程序的主布局文件当中(现在应该已经用编辑器打开了),大家会看到XML结构。如果各位之前没有接触过XML也不必担心,我们会在后续文章中进一步讨论这些基础知识。就目前来说,大家只需了解:XML是一种标记语言,类似于HTML——如果之前接触过Web开发的话。XML文件利用树状结构作为数据模型。通常来说,一个布局文件拥有一个根布局元素,并将其作为特定布局类型模型——其中所包含的用于UI条目的子元素则包括按钮、图片及文本等。

3. 可绘制资源

大家在资源目录下应该会看到多个在名称中包含“drawable”字样的文件夹,这些文件夹用于保存应用程序所使用的图片文件。这些图片文件可以是我们在Eclipse之外所准备的数字图片文件,格式包括PNG或者JPEG等。或者,大家也可以通过XML代码来描述形状、颜色以及外观,从而定义特定可绘制资源。一旦我们在drawable文件夹中创建了文件,就可以在应用布局文件或者Java代码中进行引用。这样一来,之前准备好的视觉元素就能用于应用UI了。

资源目录中会保留针对每一种尺寸的drawable文件夹。这些尺寸是各类运行Android系统的设备在像素密度方面的通用型分类依据。具体类别分为低、中、高、超高与超超高密度四种。只需从对应类型中作出选择,我们就可以在对应尺寸的帮助下轻松简化多屏幕密度的支持过程。这意味着当我们在项目中包含图片文件时,可以将其放置在不同的文件夹当中,并通过裁剪提供满足各种密度方案的版本。

4. 数据资源

在“res”目录中,我们会看到一些标题中带有“values”字样的文件夹。这些文件夹用于容纳大家希望在应用程序中所使用的数据值。这些值可以包含文本字符串以及数字。包含XML文件的值文件夹会列出其中的一项或者多项值。每份列表都包含一个名称以及内容中的值。应用中的其它文件,例如Java类或者布局文件,能够通过这些名称为引用这些值。在典型用例中,我们能够需要通过这些保存在文本字符串的值在UI元素当中显示内容——例如按钮。

应用程序中的不同值文件,允许大家针对特定屏幕尺寸及API级别对值进行修改。如果同样的值足以应对多种设备,则可以被直接保存在“Values”文件夹内。

5. Manifest文件

在查看应用程序中的主文件夹时,大家一定会发现项目的Manifest文件。通过双击即可利用编辑器将其打开。接下来,我们会看到一个显示其内容的视图。点击编辑器窗口底部的“AndroidManifest.xml”标签来查看其XML代码。这个文件将应用程序的各个方面定义成统一整体。Eclipse与ADT会在我们创建应用的同时,在清单中创建特定元素,具体创建方式取决于大家在项目创建过程中的设置。大家可以手动向清单中添加其它元素,例如添加其它Activity。

4.2android_manifest_tab

我们将运行其中的一部分主元素,旨在理解Manifest文件的作用,不过还有其它多种元素可以被包含其中。在Manifest文件中所列举的新应用项目元素当中,我们将看到uses-sdk元素,我们利用它表示最小及目标API级别。Application元素中包含指向启动机制与应用程序名称的属性。在application元素中还存在着一个activity元素,会在应用程序开始运行时通过intent-filter元素作为主Activity启动。当我们向应用中添加新的Activity时,则会为每个相关元素添加新的activity元素。

大家可能还需要向Manifest中添加其它元素,其中包括uses-permission元素,用于罗列应用所要求的权限——用户会在安装应用之前观看到该列表。权限中包含多种操作条目,例如通过互联网获取数据、写入存储或者访问设备上的其它功能——如相机。清单还会列举应用程序所能支持的设备类型以及其它一些应用程序组件(例如后台服务)。

6. 其它文件

讲到这里,我们已经谈到了大家需要了解的Android应用程序项目结构中的各大主要方面。随着对Android开发的学习,大家将在今后经常与这些内容打交道。通过Eclipse,我们还会看到项目中包含的其它一些文件及目录,不过就目前来说基本都可以直接忽略。

正如在前面看到的,大家可以利用“R.”语法实现资源引用。Eclipse以及管理系统的ADT都会引用应用中来自Java的资源。当大家在项目中对这些资源进行添加或者编辑时,Eclipse会将对应内容写入“R.java”文件,从而帮助我们利用“R.”进行资源引用。当大家开始处理自己的Java文件,会在引用时看到Eclipse弹出的提示信息——这种机制能简化对应用资源的管理工作。“R.java”文件被保存在“gen”文件夹中。请注意:千万不要尝试直接编辑这个文件,它会在我们编辑项目资源时自动生成。系统会通过为应用中的每项资源分配惟一整数ID的形式管理这一过程。

提示:当大家开始尝试Android应用程序开发时,可能会在使用R时遇到问题。如果Eclipse显示任何与R相关的错误信息,特别是“R无法被解析为一个变量”,则需要检查类文件的起始内容,看看其中是否存在“R”的导入语句,例如“import android.R;”。如果找到了对应内容,特别是在已经将代码复制并粘贴到文件中后,请删除这一导入语句。如果遇到其它与R相关的提示,请确保资源文件当中不存在错误。如果问题仍然存在,尝试利用“Project”, “Clean”清理项目。当一切努力皆告失败时,试着重新启动Eclipse。 

总结

在本篇文章中,我们了解了关于Android项目结构的基础知识。大家可以再花点时间随意查看项目中的其它文件及文件夹,借此了解项目的整体结构。在接下来的后续教程中,我们将在应用中创建用户界面元素并处理用户交互操作。我们还会探讨关于Java编程的基本特性,借此进一步提升自己对Android开发项目的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/85426.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot内嵌Tomcat连接池分析

文章目录 1 Tomcat连接池1.1 简介1.2 架构图1.2.1 JDK线程池架构图1.2.2 Tomcat线程架构 1.3 核心参数1.3.1 AcceptCount1.3.2 MaxConnections1.3.3 MinSpareThread/MaxThread1.3.4 MaxKeepAliveRequests1.3.5 ConnectionTimeout1.3.6 KeepAliveTimeout 1.4 核心内部线程1.4.1 …

shell脚本免交互

一.Here Document免交互 1.免交互概述 使用I/O重定向的方式将命令列表提供给交互式程序 是一种标准输入&#xff0c;只能接收正确的指令或命令 2.格式&#xff1a; 命令 <<标记 ....... 内容 #标记之间是传入内容 ....... 标记 注意事项 标记可以使用任意的合法…

“深度学习”学习日记:Tensorflow实现VGG每一个卷积层的可视化

2023.8.19 深度学习的卷积对于初学者是非常抽象&#xff0c;当时在入门学习的时候直接劝退一大班人&#xff0c;还好我坚持了下来。可视化时用到的图片&#xff08;我们学校的一角&#xff01;&#xff01;&#xff01;&#xff09;以下展示了一个卷积和一次Relu的变化 作者使…

2023国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

网络安全—黑客—自学笔记

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全…

Mac Flutter web环境搭建

获取 Flutter SDK 下载以下安装包来获取最新的 stable Flutter SDK将文件解压到目标路径, 比如: cd ~/development $ unzip ~/Downloads/flutter_macos_3.13.0-stable.zip 配置 flutter 的 PATH 环境变量&#xff1a; export PATH"$PATH:pwd/flutter/bin" // 这个命…

无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)

文章目录 无类别域间路由&#xff08;CIDR&#xff09;&#xff1a;理解IP网络和子网划分引言传统的IP地址类关于“IP地址的浪费” IP地址与CIDRIP地址概述网络号与主机号CIDR记法&#xff08;网络 网络地址/子网掩码&#xff09;网络和广播地址 CIDR的优势减少路由表项缓解IP…

Android 面试之Glide做了哪些优化?

前言 Glide可以说是最常用的图片加载框架了&#xff0c;Glide链式调用使用方便&#xff0c;性能上也可以满足大多数场景的使用&#xff0c;Glide源码与原理也是面试中的常客。 但是Glide的源码内容比较多&#xff0c;想要学习它的源码往往千头万绪&#xff0c;一时抓不住重点.…

0101读写分离测试-jdbc-shardingsphere-中间件

文章目录 1 前言2、创建SpringBoot程序2.1、创建项目2.2、添加依赖2.3、生成实体类、service与Mapper1.5、配置读写分离 2、测试2.1、读写分离测试2.2、事务测试2.3、负载均衡测试 结语 1 前言 shardingshpere-jdbc定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的…

文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题

四、请用go语言&#xff0c;证明:RANDOMIZED-QUICKSORT 期望运行时间是 Ω(nlgn)。 文心一言&#xff1a; 首先&#xff0c;为了证明RANDOMIZED-QUICKSORT的期望运行时间是Ω(nlg n)&#xff0c;我们需要证明在最坏的情况下&#xff0c;该算法的运行时间是O(nlg n)。然后&…

elelementui组件

一、按钮 1、按钮样式 使用type、plain、round和circle属性来定义 Button 的样式。 2、主要代码 <el-row><el-button>默认按钮</el-button><el-button type"primary">主要按钮</el-button><el-button type"success">…

antd5源码调试环境启动(MacOS)

将源码下载至本地 这里antd5 版本是5.8.3 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提&#xff1a;安装python3、node版本18.14.0(这是本人当前下载的版本&#xff09; python3安装教程可参考&#xff1a;https://…

06-微信小程序-注册程序-场景值

06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例&#xff0c;绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…

框架分析(2)-React

框架分析&#xff08;2&#xff09;-React 专栏介绍React核心思想关键特性和功能组件化开发单向数据流JSX语法强大的生态系统 优缺点分析优点缺点 专栏介绍 link 主要对目前市面上常见的框架进行分析和总结&#xff0c;希望有兴趣的小伙伴们可以看一下&#xff0c;会持续更新的…

树莓派和windows之间文件传输

方案一&#xff1a;FileZilla 在电脑上下载FileZilla软件并打开&#xff0c;输入配置信息&#xff0c;用户名/密码、树莓派的IP地址,点击“快速连接” 方案二&#xff1a;samba 树莓派安装 samba 软件 sudo apt-get install samba samba-common-bin 修改配置文件 / etc /samba…

Python搭建http文件服务器实现手机电脑文件传输功能

第一种代码的界面如下&#xff1a;&#xff08;有缺点&#xff0c;中文乱码&#xff09; # !/usr/bin/env python3 # -*- coding:utf-8 _*-"""Simple HTTP Server With Upload. python -V3.6 This module builds on http.server by implementing the standard G…

【Python原创设计】基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统-附下载链接以及详细论文报告,原创项目其他均为抄袭

基于Python Flask 机器学习的全国上海气象数据采集预测可视化系统 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 在信息科技蓬勃发展的当代&#xff0c;我们推出了一款基于Python Flask的全国上海气象数…

[Machine Learning] decision tree 决策树

&#xff08;为了节约时间&#xff0c;后面关于机器学习和有关内容哦就是用中文进行书写了&#xff0c;如果有需要的话&#xff0c;我在目前手头项目交工以后&#xff0c;用英文重写一遍&#xff09; &#xff08;祝&#xff0c;本文同时用于比赛学习笔记和机器学习基础课程&a…

<数据结构与算法>二叉树堆的实现

目录 前言 一、树的概念及结构 1 树的概念 2 树的相关概念 二、二叉树的概念及结构 1.二叉树的概念 2. 特殊的二叉树 3. 二叉树的性质 4.二叉树的存储结构 三、二叉树的顺序结构及实现 1.堆的性质 2.堆的插入 3.堆的实现 堆的结构体 HeapInit 初始化 HeapPush 插入 HeapPop 删…

2023-8-22 模拟栈

题目链接&#xff1a;模拟栈 #include <iostream>using namespace std;const int N 100010;int m; int stk[N], tt;int main() {cin >> m;while(m--){string op;int x;cin >> op;if(op "push") {cin >> x;stk[tt] x;}else if(op "…