热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

教你开发Android

其实这个目录结构初次看还是挺让人心慌慌的。Android 现在引入了一个构建系统叫做 Gradle ,你可以理解为一个CC++里面的Makefile 或者是node里面的 

其实这个目录结构初次看还是挺让人心慌慌的。

Android 现在引入了一个构建系统叫做 Gradle ,你可以理解为一个C/C++里面的Makefile 或者是node里面的 gulp 。

Android Studio 里面是分模块进行开发的,一个 app 可以只有一个模块,也可以有多个模块组成(比如一些自己开发的库)。如果我们的应用足够简单的话,那么就只有一个模块, Android Studio 默认创建的模块就叫 app ,可以看见,文件夹旁边还有个小手机的标志,代表这是一个 Android Application 模块,而不是一个Android Library 或者是其他模块。

看看我们的代码应该放哪,我们把注意力集中在这个文件夹

技术分享

src 是 source 的意思,也就是源码所在的目录,我们主要就是在这个文件夹里写东西。

Main在哪?

我们来看看,我们要的 Main 函数在哪里?

首先我们看 src/main 目录下的 AndroidManifest.xml 文件。

技术分享

AndroidManifest 是描述App的一个最最重要的文件,一些内容的定义,主题的设置都在这里,如果熟悉 node 的朋友肯定知道 package.json ,一样一样的。

我们看到下图,在AndroidManifest中,出现的 MAIN 和 LAUNCHER 字眼,Activity 有了他们两个的描述,它就成了你点击app的icon启动的第一个 Activity

技术分享

在 src/main/java 文件夹中,找到 MainActivity ,打开,看见其中有一个onCreate 的函数

技术分享顾名思义,这个函数是在这个 Activity 创建的时候调用的,它首先调用了下父类的onCreate方法(不可省略),然后调用了 setContentView 方法,这个方法是告诉Android系统:我用哪个布局文件去渲染这个 Activity ,好了,到这里一个入口的Activity 就创建好了。

注:在 Android 系统中, Activity 类的对象不是用来给开发者直接去 new的,它的生命周期 由系统直接管控 因为我们不参与控制 Activity 的生命周期,因此它在什么时候回调什么函数变得异常重要。学习编程最好的去处就是官方文档,如果想更加深入了解Android Activity生命周期的童鞋,我这里推荐看下官方对它的描述 传送门: http://developer.android.com/training/basics/activity-lifecycle/index....

界面如何自定义?

接下来说说 Android 中的布局系统,众所周知, Android 一开始的设计就是为了相对布局而生的。它提供了许多强大的布局特性,我们先学习下 Android 中最常见的两种布局:

  1. 线性布局(LinearLayout)
  2. 相对布局(RelativeLayout)

线性布局就是子控件按顺序依次排列,线性布局可以设置方向,从上到下(vertical)或者从左到右(horizontal)。相对布局就更自由了,如果你增加一个子控件,不设置任何属性,则子空间的位置在容器的左上角(0,0)处。如果想改变位置,可以通过在容器中的位置(比如左上,右上,左下,右下,中间,左对齐垂直居中,右对齐垂直居中等等),或者和兄弟结点的对齐方式来决定控件的位置。

布局相关的参考可以看这个链接:http://developer.android.com/training/basics/firstapp/building-ui.html

如何和控件交互

在 Activity 中,和 xml 相关的绑定在 setContentView 这步就算完成了。Activity 在这之后会回调一个叫 onContentChanged 方法,在这个方法中,你可以使用类似如下代码:

TextView textView = findViewById(R.id.textview);

来获得对指定控件的引用,其中 R.id.textview 是你在 xml 中指定的android:id ,通常情况下,在一个 xml 文件中,同样的 id 只允许出现一次。

获取到对控件的引用,我们就能调用一些控件里的方法获取我们要的内容,或者设置我们要的内容,比如我这里引用了一个 TextView ,则可以如下:

textView.getText()

获取到 textView 里面的内容。

以上就是最基础的 UI 部分的入门讲解。接下去,我们可以看看要写的App的整个结构。






http://www.haoqijie.com/u/4256/book
http://www.haoqijie.com/u/4258/book
http://www.haoqijie.com/u/4261/book
http://www.haoqijie.com/u/4262/book
http://www.haoqijie.com/u/4263/book
http://www.haoqijie.com/u/4264/book
http://www.haoqijie.com/u/4265/book
http://www.haoqijie.com/u/4266/book
http://www.haoqijie.com/u/4267/book
http://www.haoqijie.com/u/4268/book
http://www.haoqijie.com/u/4269/book
http://www.haoqijie.com/u/4270/book
http://www.haoqijie.com/u/4271/book


http://www.haoqijie.com/u/4272/book
http://www.haoqijie.com/u/4273/book
http://www.haoqijie.com/u/4274/book


http://www.haoqijie.com/u/4275/book
http://www.haoqijie.com/u/4276/book
http://www.haoqijie.com/u/4277/book


http://www.haoqijie.com/u/4278/book
http://www.haoqijie.com/u/4279/book
http://www.haoqijie.com/u/4280/book
http://www.haoqijie.com/u/4281/book
http://www.haoqijie.com/u/4282/book
http://www.haoqijie.com/u/4283/book
http://www.haoqijie.com/u/4284/book
http://www.haoqijie.com/u/4285/book
http://www.haoqijie.com/u/4286/book
http://www.haoqijie.com/u/4287/book




http://www.haoqijie.com/u/4288/book
http://www.haoqijie.com/u/4289/book
http://www.haoqijie.com/u/4290/book




http://www.haoqijie.com/u/4291/book
http://www.haoqijie.com/u/4291/book


http://www.haoqijie.com/u/4292/book
http://www.haoqijie.com/u/4293/book
http://www.haoqijie.com/u/4293/book
http://www.haoqijie.com/u/4294/book
http://www.haoqijie.com/u/4295/book
http://www.haoqijie.com/u/4295/book
http://www.haoqijie.com/u/4296/book
http://www.haoqijie.com/u/4297/book
http://www.haoqijie.com/u/4298/book
http://www.haoqijie.com/u/4299/book

版权声明:本文为博主原创文章,未经博主允许不得转载。

教你开发Android


推荐阅读
  • 在Tomcat启动过程中,遇到了 `java.io.EOFException` 异常,具体表现为 `ObjectInputStream$PeekInputStream.readFully` 方法读取数据时出现不完整的情况。该问题通常由输入流提前结束或数据传输不完整引起,需要检查数据源的完整性和网络连接的稳定性。 ... [详细]
  • EasyUI作为一种高效的前端框架,显著简化了JavaScript代码的编写,提升了开发效率。在构建窗口应用程序时,首先需要引入EasyUI所需的JS文件和CSS样式表。由于EasyUI依赖于jQuery,因此还需确保正确加载jQuery库。通过这种方式,开发者能够快速实现界面组件的动态交互与美观布局,为用户提供更加流畅的使用体验。 ... [详细]
  • 超链接作为网页间的重要连接方式,不仅是信息流动的关键通道,还极大地提升了网络资源的可访问性和互联性。通过超链接,用户能够便捷地在不同网站和页面之间跳转,获取所需信息,促进了互联网内容的广泛传播与高效利用。 ... [详细]
  • 在 Linux 环境下,深入探讨 GTK+3.0 的高级开发技巧,涵盖组件定制、事件处理及多线程应用等核心内容,帮助开发者提升应用界面的交互性和性能。 ... [详细]
  • 本文深入探讨了Windows操作系统中线程同步机制的关键技术,重点分析了`WaitForSingleObject`和`Event`的使用方法及其应用场景。通过详细介绍`CreateEvent`函数的创建过程及其在判断线程退出和实现线程间同步中的重要作用,结合具体实例,展示了如何高效地利用这些工具来解决多线程编程中的常见问题。此外,文章还讨论了这些机制在实际开发中的最佳实践和注意事项,为开发者提供了宝贵的参考。 ... [详细]
  • 本文深入探讨了 AdoDataSet RecordSet 的序列化与反序列化技术,详细解析了将 RecordSet 转换为 XML 格式的方法。通过使用 Variant 类型变量和 TStringStream 流对象,实现数据集的高效转换与存储。该方法不仅提高了数据传输的灵活性,还增强了数据处理的兼容性和可扩展性。 ... [详细]
  • classpath和classpath*区别:classpath:只会到你的class路径中查找找文件。classpath*:不仅包含class路径,还包括jar文件中(class ... [详细]
  • Tornado硬件管理平台中的设备信息采集技术深入解析(三)
    深入解析 Tornado 硬件管理平台中的设备信息采集技术,本文聚焦于 `monitor.py` 脚本的关键字段分析。该脚本通过导入 `psutil`、`time` 和 `datetime` 模块,以及使用 `pprint` 进行数据格式化输出,实现对系统资源和设备状态的高效监控与数据采集。 ... [详细]
  • 如何在SharePoint 2013中使用不同用户身份进行登录操作
    在创建了SharePoint 2013网站后,我注意到其界面与2010版本有所不同,特别是缺少了“以其他用户身份登录”的功能,这对测试工作造成了不便。通过查阅一些国外的技术资源,最终找到了有效的解决方案。这一方法不仅解决了登录问题,还提升了多用户环境下的测试效率和安全性。 ... [详细]
  • ### 一、指令概述指令是 Vue 中的一种特殊属性,用于增强 HTML 元素的功能。它们以 `v-` 开头,如 `v-cloak`。### 二、`v-cloak` 指令的应用`v-cloak` 指令主要用于解决页面加载过程中未编译的 Vue 插值表达式短暂显示的问题。在 Vue 实例编译完成之前,带有 `v-cloak` 的元素将被隐藏,从而避免了“闪动”现象。通过结合 CSS 样式,可以进一步优化用户体验,确保页面在初始加载时保持整洁和专业。 ... [详细]
  • 本研究聚焦于智能图库管理和高清摄影功能的优化。通过集成系统预设的多媒体参数,利用 `UIImagePickerController` 实现了高效的拍照和系统相册访问功能。系统会自动检测设备的兼容性,并提供用户友好的界面以确保最佳的使用体验。此外,我们还引入了先进的图像处理算法,进一步提升了照片质量和存储效率。 ... [详细]
  • 在解决Android应用程序中的ANR问题时,我引入了StrictMode机制。尽管之前未曾使用过这一工具,但通过实践发现它能有效检测并定位性能瓶颈。日志中出现的两个违规记录,除了前四行信息和持续时间存在差异外,还可能涉及不同的线程或操作类型。深入理解这些差异有助于更好地优化应用性能。 ... [详细]
  • 题目要求在给定的数组中找到一个连续子数组,使其乘积最大。本文详细介绍了使用动态规划算法解决这一问题的方法,包括状态定义、状态转移方程和初始化步骤。通过具体的例子和代码实现,帮助读者深入理解该算法的核心思想和实现细节。 ... [详细]
  • Dapper:一款高效轻量的ORM框架
    Dapper 是一个高效且轻量级的 ORM(对象关系映射)框架,由 StackExchange 开发并维护。它旨在提供快速的数据访问性能,同时保持代码的简洁性和易用性。Dapper 可以显著提高开发效率,特别适用于需要高性能数据操作的应用场景。更多详细信息可参考其官方文档和 GitHub 仓库。 ... [详细]
  • 在JSP页面中调用客户端本地应用程序(例如 `C:\netterm.exe`)时,可以通过使用 `Runtime.getRuntime().exec("c:\\netterm.exe")` 实现。然而,这种方法仅在服务器端有效,若要实现在客户端执行本地程序,需要采用其他技术手段,如Java Applet或ActiveX控件,以确保安全性和兼容性。 ... [详细]
author-avatar
ougq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有