按照博客的进程,今天应该进行程序编写啦,下面让我们开写一个简单的HelloWorld程序。

提示:这里对于如何使用Eclipse创建一个Android程序就不多讲啦,不会的同学可以去查阅相关文档。

  1. 程序清单文件hello_world.xml
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".HelloWorldActivity" >
  10.  
  11. <TextView
  12. android:id="@+id/show"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_centerInParent="true"
  16. android:layout_alignParentTop="true"
  17. android:text="@string/hello_world" />
  18.  
  19. <Button
  20. android:id="@+id/button1"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_below="@id/show"
  24. android:text="单击我"
  25. android:onClick="clickHandler"/>
  26.  
  27. </RelativeLayout>

上面XML文档的跟元素是RelativeLayout,它代表一个相对布局,在该界面布局里包含如下两个UI控件。

  • TextView:代表一个文本框
  • Button:代表一个普通按钮

①android:id:该属性指定了该控件的唯一标识,在Java程序中可以通过findViewById("id")来获取指定的Android界面组件。

②android:layout_width:指定该界面组件的宽度。如果该属性值为match_parent,则说明该组件与其父容器具有相同的宽度;如果该属性值为wrap_content,则说明该组件宽度取决于它的内容——能包裹它的内容即可。

③android:layout_height:指定该界面组件的高度。如果该属性值为match_parent,则说明该组件与其父容器具有相同的高度;如果该属性值为wrap_content,则说明该组件的高度取决于它的内容——能包裹它的内容即可。

2.    程序清单文件HelloWorldActivity.java

  1. package org.crazyit.helloworld;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.view.Menu;
  6. import android.view.*;
  7. import android.widget.*;
  8.  
  9. public class HelloWorldActivity extends Activity {
  10.  
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.hello_world);
  15. }
  16.  
  17. @Override
  18. public boolean onCreateOptionsMenu(Menu menu) {
  19. // Inflate the menu; this adds items to the action bar if it is present.
  20. getMenuInflater().inflate(R.menu.hello_world, menu);
  21. return true;
  22. }
  23.  
  24. public void clickHandler(View source)
  25. {
  26. //获取界面ID为R.id.show的文本框
  27. TextView tv=(TextView)findViewById(R.id.show);
  28. //改变文本框的文本内容
  29. tv.setText("Hello Android-你好现在时间为:"+new java.util.Date());
  30.  
  31. }
  32.  
  33. }

对于上面的代码做如下分析:

  • 设置该Activity使用hello_world.xml文件定义的界面布局作为用户界面。
  • 定义了一个clickHandler()方法作为按钮事件处理方法——在处理方法中改变ID为R.id.show的文本框的内容。

3.   通过ADT或者真机运行应用(此处不再赘述)

4.   Android应用结构分析

以上代码有两个疑问:

  • findViewById(R.id.show);代码中的R.id.show是什么?从哪里来?
  • 为何setContentView(R.layout.hello_world);代码设置使用hello_world.xml文件定义界面布局文件?

带着这些疑问我们进一步“追根究低”

找到我们创建的HelloWorld程序所在的目录:可以看到如下几个必要的文件夹

上面的文件结构中res目录,src目录、AndroidManifest.xml文件是Android项目必须的,其他目录、其他文件都是可选的。

  • res目录存放Android项目的各种资源文件,比如子目录layout存放各种界面布局文件,values子目录则存放各种XML格式的资源文件,例如字符串资源文件:string.xml;颜色资源文件:colors.xml;尺寸资源文件:dimens.xml。drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi这4个子目录分别用于存放低分辨率、中分辨率、高分辨率、超高分辨率的4种图片文件。
  • src目录只是一个普通的、保存Java源文件的目录。
  • AndroidManifest.xml文件是安卓项目的系统清单文件,它用于控制Android应用的名称、图标、访问权限等整体属性。除此之外Android应用的Activity、Service、ContentProvider、BoradcastRecevier这4大组件都在该文件中配置。
  • 除此之外还可以看到一个build.xml文件这是Android为该项目提供的一个Ant生成文件。如果没有该文件可以用切换到项目生成的跟目录敲入命令:android update project -n <项目名称> -p <项目所在的位置> 生成build.xml文件 ,如图

上图中HelloWorld为项目名称,“.”代表当前路径

  • 在项目的生成目录中启动ant命令,下面对ant命令简单介绍一下

Ant是一个非常简答、易用的项目生成工具。对绝大部分Java开发者来说,使用Ant应该是一项基本的技能。现在可以登录到http://ant.apache.org/下载后在环境变量中配置后相关路径即可使用

  1. clean:清除项目生成的内容——也就是恢复原来的样子。
  2. debug:打包一个调试用的Android应用的APK包,使用debug key进行签名。
  3. release:打包一个发布用的Android应用的APK包。
  4. test:运行测试。要求该项目必须是一个测试项目。
  5. install:将生成的调试用的APK包安装到模拟器上。
  6. uninstall:从模拟器上卸载该应用程序。

先执行ant release命令来发布该项目,发布完成后到Hello World目录下出现了两个子目录。

①bin:该目录用于存放生成的目标文件,如Java的二进制文件、资源打包文件(.ap_后缀)、Dalvik虚拟机的可执行文件(.dex后缀)等。

②gen:该目录用于保存自动生成的、位于Android项目包下的R.java文件。上面我们编写Android程序代码时多次使用了R.layout.main、R.id.show、R.id.ok......现在明白R是什么了,它原来是Android项目自动生成的Java类。

  • 自动生成的R类
  1. /* AUTO-GENERATED FILE. DO NOT MODIFY.
  2. *
  3. * This class was automatically generated by the
  4. * aapt tool from the resource data it found. It
  5. * should not be modified by hand.
  6. */
  7.  
  8. package org.crazyit.helloworld;
  9.  
  10. public final class R {
  11. public static final class attr {
  12. }
  13. public static final class dimen {
  14. /** Default screen margins, per the Android Design guidelines.
  15.  
  16. Customize dimensions originally defined in res/values/dimens.xml (such as
  17. screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
  18.  
  19. */
  20. public static final int activity_horizontal_margin=0x7f040000;
  21. public static final int activity_vertical_margin=0x7f040001;
  22. }
  23. public static final class drawable {
  24. public static final int ic_launcher=0x7f020000;
  25. }
  26. public static final class id {
  27. public static final int action_settings=0x7f080002;
  28. public static final int button1=0x7f080001;
  29. public static final int show=0x7f080000;
  30. }
  31. public static final class layout {
  32. public static final int hello_world=0x7f030000;
  33. }
  34. public static final class menu {
  35. public static final int hello_world=0x7f070000;
  36. }
  37. public static final class string {
  38. public static final int action_settings=0x7f050001;
  39. public static final int app_name=0x7f050000;
  40. public static final int hello_world=0x7f050002;
  41. }
  42. public static final class style {
  43. /**
  44. Base application theme, dependent on API level. This theme is replaced
  45. by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
  46.  
  47. Theme customizations available in newer API levels can go in
  48. res/values-vXX/styles.xml, while customizations related to
  49. backward-compatibility can go here.
  50.  
  51. Base application theme for API 11+. This theme completely replaces
  52. AppBaseTheme from res/values/styles.xml on API 11+ devices.
  53.  
  54. API 11 theme customizations can go here.
  55.  
  56. Base application theme for API 14+. This theme completely replaces
  57. AppBaseTheme from BOTH res/values/styles.xml and
  58. res/values-v11/styles.xml on API 14+ devices.
  59.  
  60. API 14 theme customizations can go here.
  61. */
  62. public static final int AppBaseTheme=0x7f060000;
  63. /** Application theme.
  64. All customizations that are NOT specific to a particular API-level can go here.
  65. */
  66. public static final int AppTheme=0x7f060001;
  67. }
  68. }

同过R.java类中的注释可以看出,R.java文件是有aapt工具根据应用中的资源文件来自动生成的,可以包R.java理解成Android应用的资源字典。
     aapt生成R.java文件的规则主要是如下两条:

①每类资源对应R类的一个内部类

②每个具体的资源对应于内部类的一个public static final int 类型的Field。

5、res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源。已/res/values/string.xml文件来说,该文件内容十分简单,它只是定义了一条条的字符串长量,如以下代码所示:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.  
  4. <string name="app_name">HelloWorld</string>
  5. <string name="action_settings">Settings</string>
  6. <string name="hello_world">Hello world!</string>
  7.  
  8. </resources>

上面的资源文件中定义了一个字符串常量,常量的值为HelloWorld,该字符串常量的名称为app_name。一旦定义了这份资源文件之后,Android项目允许分别在Java代码、XML代码中使用这份资源文件中的字符串资源。

①在Java代码中使用资源

为了在Java代码中使用资源,AAPT会为Android项目自动生成一个R.java文件,R类里为每份资源定义了一个内部类,其中每个资源项对应于内部类里一个int类型的Field。例如上面的字符串资源文件对应于R.java里面的内容:

  1. public static final class string {
  2. public static final int app_name=0x7f050000;
  3. }

借助于AAPT工具自动生成R类的帮助,Java代码可以通过R.string.app_name来引用到“HelloWorld”字符串常量。

②在XML文件中使用资源

在XML文件中使用资源更加简单,只要按如下格式来访问即可:

@<资源对应的内部类的类名>/<资源项的名称>

例如我们要访问上面的字符串资源中定义的“HelloWorld”字符串常量,则使用如下形式来引用即可:@string/app_name

但有一种情况例外,当我们在XML文件中使用标示符时——这些标示符无须使用专门的资源进行定义,直接在XML文档中按如下格式分配标示符即可:

@+id/<标示符代码>

例如使用如下代码为一个组件分配标示符:

android:id="@+id/ok"

上面的代码为该组件分配了一个标示符,接下来就可以在程序中引用该组件了。

如果希望在Java代码中获取该组件,通过调用Activity的findViewById(R.id.ok)方法即可实现。

如果希望在XML文件中获取该组件,则可通过资源引用的方式来引用它,语法如下:

@id/<标示符代码>

6、Android应用的清单文件:AndroidManifest.xml

AndroidManifest.xml清单文件是每个Android项目所必需的,它是整个Android应用的全局描述文件。AndroidManifest.xml清单文件说明了该应用的名称、所使用的图标以及包含的组件等。

AndroidManifest.xml清单文件通常可以包含如下信息:

  • 应用程序的包名,该包名将会作为该应用的唯一标识。
  • 应用程序所包含的组件,如Activity、Service、BroadcastReceiver和ContentProvider等
  • 应用程序兼容的最低版本。
  • 应用程序使用系统所需的权限说明。
  • 其他程序访问该程序所需的权限说明。

下面是一份简单的AndroidManifest.xml清单文件。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 指定该Android应用的包名,该包名可用于唯一的表示该应用 -->
  3. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  4. package="org.crazyit.helloworld"
  5. android:versionCode="1"
  6. android:versionName="1.0" >
  7. <!-- 声明该应用本身需要打电话的权限 -->
  8. <uses-permission android:name="android.permission.CALL_PHON" />
  9. <!-- 声明该应用本身需要发送短信的权限 -->
  10. <uses-permission android:name="android.permission.SEND_SMS" />
  11. <uses-sdk
  12. android:minSdkVersion="8"
  13. android:targetSdkVersion="17" />
  14. <!-- 指定Android应用标签、图标 -->
  15. <application
  16. android:allowBackup="true"
  17. android:icon="@drawable/ic_launcher"
  18. android:label="@string/app_name"
  19. android:theme="@style/AppTheme" >
  20. <!-- 定义Android应用的一个组件:Activity 该Activity的类为HelloWorld,并指定该Activity
  21. 的标签 -->
  22. <activity
  23. android:name="org.crazyit.helloworld.HelloWorldActivity"
  24. android:label="@string/app_name" >
  25. <intent-filter>
  26. <!-- 指定该Activity是程序的入口 -->
  27. <action android:name="android.intent.action.MAIN" />
  28. <!-- 指定加载该应用时运行该Activity -->
  29. <category android:name="android.intent.category.LAUNCHER" />
  30. </intent-filter>
  31. </activity>
  32. </application>
  33.  
  34. </manifest>

应用程序权限清单文件权限说明:此处待续

创建第一个Android应用程序 HelloWorld的更多相关文章

  1. ❤️【Android精进之路-03】创建第一个Android应用程序竟然如此简单❤️

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文会重点介绍如何创建第一个Android应用,以及如何使用Android Studio进行调试 干货满满,建议收藏,需要用到时常看看.小伙伴们如 ...

  2. 第2章 开始入手 —— 01 创建第一个 Android 应用程序

    创建一个新的 Android 项目 操作步骤: (1) 选择 File | New | Android Application Project ,弹出 New Android Application ...

  3. 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...

  4. 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行 实现步骤: 打开 Android Studio,创建一个 Andr ...

  5. Android:日常学习笔记(2)——分析第一个Android应用程序

    Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...

  6. 创建第一个Android项目

    目录 创建第一个Android项目 创建HelloWorld项目 选择模板 选择模板界面的英文翻译 配置项目 配置项目界面英文翻译及解释 配置项目界面的注意事项 Name的命名规范 Package n ...

  7. 3.创建第一个android项目

    安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 3.创建第一个android项目 1.打开Eclipse,选择File——>new——>others.. ...

  8. 认识Activity,创建第一个android应用-Hello Word

    2016-04-05 配置好Java.eclipse和Android环境就花费了一天时间.下载SDK真是费了不少时间.现在终于找到解决SDK更新的好方法了(更新自己电脑上的hosts文件,就可以使用G ...

  9. Android官方教程翻译(1)——创建第一个Android应用

    转载请注明出处:http://blog.csdn.net/dawanganban/article/details/9822431 Building Your First App GETSTARTED ...

随机推荐

  1. (转)Hadoop的InputFormats和OutputFormats

    Data Mining Hadoop的InputFormats和OutputFormats InputFormat InputFormat类用来产生InputSplit,并把它切分成record. p ...

  2. SSL 通信原理及Tomcat SSL 双向配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  3. 手动启动Android模拟器

    1.5版本中加了个所谓的AVD(Android Virtual Device),AVD就相当于是一个模拟器的,不过你可以利用AVD创建基于不同版本的模拟器,然后使用emulator-avd avdNa ...

  4. compass scss blueprint

    [转载] 今天在执行compass create my-grid –using blueprint 命令时发现报错 google了一下,说是新版compass已经不包括compass-bluprint ...

  5. corosync集群的选举算法

    <Cluster Concepts> http://linux-ha.org/wiki/Cluster_Concepts <Managing Computers with Autom ...

  6. CentOS 6.4 x64 Percona-Server-5.6.15 源码安装

    首先下载 Percona-Server-5.6 http://www.percona.com/downloads/Percona-Server-5.6/LATEST/source/ 然后必须先安装cm ...

  7. iOS开发——UIImageView

    1.图像点击之后,全屏浏览 - (void)viewDidLoad { [super viewDidLoad]; _myImage=[[UIImageView alloc]initWithFrame: ...

  8. Mybatis 模糊查询 中文问题

    IDE编码:GBK ,换成UTF-8也不行! @Testpublic void testSearchStudents() {logger.info("查询学生(带条件)");Map ...

  9. 转:HTTPS 升级指南

    上一篇文章我介绍了 HTTP/2 协议 ,它只有在 HTTPS 环境才会生效. 为了升级到 HTTP/2 协议,必须先启用 HTTPS.如果你不了解 HTTPS 协议(学名 TLS 协议),可以参考我 ...

  10. python实现断点续传下载文件

    最近的任务里有一个功能是要我从日志服务器实时跟新日志到本地,日志在不断新增内容就需要我隔一段时间从上次下载的位置继续下载,并写入本地文件上次写完的位置后面. headers = {'Range': ' ...