`
king_tt
  • 浏览: 2106237 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

从零开始--系统深入学习android(实践-让我们开始写代码-指南-1.Hello,World)

 
阅读更多

第1章 Hello,World

作为一名开发者,我们学习一个平台的第一印象肯定都是写一个“Hello,World”。在Android上写一个“Hello,World”是很简单的,由于我们使用Eclipise IDE,它提供了ADT这么强大的插件,这样创建和管理一个项目就更简单了,可以大大缩短我们的时间。在开始之前,你应该确认你已经安装了SDK和ADT插件。本章会根据以下几个部分来讲述:

1. 安装一个平台(系统版本)

2. 创建一个Android虚拟机(AVD)

3. 创建一个项目

4. 构建一个用户界面

5. 执行代码

6. 升级界面为一个XML布局

7. 调试你的项目

1.1 安装一个平台(系统版本)

为了执行Hello World应用程序,你需要在你的SDK环境中安装至少一个Android平台版本。如果你已经安装了就可以跳过这一步,请注意根据你的实际情况下载最实用的平台版本,笔者自己下载的是1.6----2.1----2.2---2.3----3.0这五个版本的平台版本,请根据自己实际情况下载吧。如果你还没有下载过一个平台版本,在Eclpise请按照以下步骤执行:

1. 在Android SDK Manager 中,选择左边面板中的Available Packages

2. 在右边面板,展开Android Repository列表显示一些可用的安装组件

3. 至少选择一个平台安装,点击Install Selected

1.2 创建一个Android虚拟机(AVD)

我们在第一大篇的开发入门中已经讲过,如何使用和管理AVD。在本章中,我们将在Android模拟器中执行我们的应用程序。所以在你启动一个模拟器之前,必须先创建一个AVD。创建步骤如下:

1. 在Eclipse中,选择Window > AVD Manager

2. 在左边面板选择Virtual Devices

3. 点击New...

然后来到Create New AVD对话框

4. 输入虚拟机的名字,我自己的虚拟机都是使用系统版本命名,例如“AVD2.2.

5. 选择一个target(Android SDK系统版本例如2.3.3)。然后本章为了简单,后面的字段就省略掉了

6. 点击Create AVD.

1.3 创建一个新的Android项目

下面我们来创建一个新Android的项目,步骤如下:

1. 在Eclipse中, 选择File > New > Project...

如果你的ADT插件安装正确,那么应该会显示出如图1-1的界面

图1-1在Eclipse创建Android项目的截图

2. 选择"Android Project"然后点击Next
3. 按照以下步骤填写一些项目细节,如图1-2所示:

◆Project name:HelloAndroid

◆Build Target:根据你虚拟机创建的系统版本来选择对应的Application name:Hello, Android

◆Package name:com.example.helloandroid (包名)

◆Create Activity:HelloAndroid(主Activity名)

图1-2在Eclipse创建Android项目中填写相应的细节

这里我们讲以下Min SDK Version字段:当我们Build Target选择的是2.1(对应的API Level为7)时,这里应该填7或者低于7的版本,例如3或者4。切记不能填写高于7的。不然会有一些错误和隐患。我们的项目已经创建好了,然后我们在Eclipse左边的Package Explorer面板打开HelloAndroid.java文件,位于HelloAndroid > src > com.example.helloandroid。代码如下:

复制代码
package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

publicclassHelloAndroidextendsActivity{
    /** Called when the activity is first created. */
    @Override
    publicvoid onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
复制代码

代码清单1-1

注意我们的HelloAndroid是继承于Activity类的。一个Activity是一个单一的应用程序实体,用于执行动作。一个应用程序可能有许多个Activityies组成,但在某一时刻只有一个Acitvity与用户在交互。当你的Activity启动后,Android系统会调用onCreate()方法。你应该在这里执行一些初始化和UI设置的操作。一个Activity不需要有一个用户界面也能正确执行,但通常我们应该加一个基础的用户界面来显示一些东西,下面让我们来修改一些代码!

1.4 构建一个用户界面

同样在HelloAndroid 类中,改进了一下代码。下面的粗体就是我们新添加的。

复制代码
package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       TextView tv = new TextView(this);
       tv.setText("Hello, Android");
       setContentView(tv);
   }
}
复制代码

代码清单1-2

一个Android用户界面是由Views的对象层次结构组成的。一个View是一个可绘制的对象,并当做一个UI布局元素,例如一个按钮,图片或者此处TextView(文本标签)。每一个UI元素的都是一个View,它们都直接或间接继承与View类。这里我们创建一个TextView对象,需要传一个Context实例对象。Context用于处理与系统相关的一些操作,例如解决资源调用,获得访问数据库的一些接口和首选项等。Activity 类继承自Context,所以这里可以直接传”this”。接下来我们需要使用setText()来设置文本的内容。最后我们需要通过setContextView()把TextView添加到我们当前的Activity界面中。如果你没有调用setContextView(),那么系统不会显示这个TextView,而是显示一个背景全黑的空白屏幕。

好的,”Hello,Android”的项目代码已经写好了,接下来我们需要执行它了。

1.5 执行应用程序

由于在Eclpise中有插件,我们执行它很容易,并且方法有很多种,这里我们可以在项目上点击鼠标右键->选择Run As->Anroid Application

Eclipse插件自动为您的项目创建一个新的运行配置文件,然后启动Android模拟器。根据您的环境,Android模拟器可能需要几分钟才能全面启动完毕,所以请耐心等待。当启动完毕后,Eclipse插件会安装应用程序,并启动默认的Activity。显示效果如图1-3所示:

图1-3在Eclipse中使用模拟器启动Hello,Android后的截图

在应用程序灰色栏中看到的“Hello,Android”实际上是应用程序的标题。创建项目时,Eclipse插件会自动创建res/values/strings.xml。然后再AndroidManifest.xml会引用strings.xml中的标题字段。标题下面的文字,才是我们在代码中写的TextView。虽然“Hello World”已经写完了,但是你可以继续阅读项目中其他有价值的信息。

1.6 升级界面为一个XML布局

在 "Hello, World" 例子中我们使用的是代码布局。如果你是位经验丰富的的UI程序员,你可能熟悉这种做法是非常脆弱的:布局中的微小变化可能导致大量代码的改动,并且很容易与之忘记相关的其他View,这会导致你的布局错误并且浪费大量时间在调试。因此Android提供了一种基于XML布局文件来代替用代码写布局的模式。下面让我们来举一个例子,跟上面的“代码清单1-2”一样的效果,我们不使用代码布局一个TextView,而使用以下的XML文件来代替:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/textview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:text="@string/hello"/>

这是一个简单的Android XML布局文件结构:它是一个树节点,其中每个节点都是一个View。我们使用的元素都是继承自View类的,TextView是Android已经写好的一个View,当然我们也可以在代码自定义View。这种结构可以很容易的快速建立用户界面,比起代码布局,它使用更简单的结构和语法。在上面的XML布局文件中只有一个TextView节点,但这里用到了几个属性。如表格1-1所示:

属性

描述

xmlns:android

这是一个XML命名空间声明,告诉Android的工具,你会引用在Android命名空间中定义的共同属性。在每一个Android的布局文件的最外层标签必须有此属性。

android:id

该属性指定一个TextView元素的唯一标识符。您可以使用分配的ID从源代码中引用它。

android:layout_width

该属性定义了这个View需要占用的宽度,“fill_paren”表示占用父节点的全部宽度,这里的父节点即屏幕。

android:layout_height

和宽度类似,表示高度

android:text

这设置TextView中应显示的文字。在这个例子中,我们使用的是硬编码的字符串值,而不是引用的一个字符串资源。当然更好的做法是引用在res/strings.xml文件定义的hello字符串。因为这样符合国际化。这里为了简单起见我们暂用硬编码。

表格1-1XML中节点的属性

这些XML布局文件被放置在你工程的res/layout/目录下。”res”代表资源,该目录包含所有的非代码资源,除了布局文件夹,还包括图像,声音,本地化字符串等。

Android默认的布局方式是纵向布局,在多屏幕多分辨那章,笔者已经介绍过了,这里我们的xml是放入layout/下的,layout就是默认的纵向布局,如果你吧手机横向放置,android就会显示横向的布局,由于我们没有在layout-land下放入布局文件,所以它会直接的在纵向布局下拉伸,当然这里只是一个小提示,真正做好一个项目,这些细节是必须考虑的。这里为了简单起见,我们就让他拉伸吧。Eclipse插件在我们新建项目的时候就在res/layout/下创建了一个main.xml的布局文件。我们在“代码清单1-2”中是没有使用这个main.xml布局文件的。

现在让我们重新修改一下”代码清单1-2”,如“代码清单1-3”所示

复制代码
package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
复制代码

代码清单1-3

我们放弃了,“代码清单1-2”中的代码生成View的方式,转而使用“代码清单1-3”XML布局文件,你会发现仅仅一行就搞定了,接下来让我们看看R类(俗称R文件)。在Eclipse中的项目中的gen/下找到我们的R.java。代码如下

复制代码
package com.example.helloandroid;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class id {
        public static final int textview=0x7f050000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}
复制代码

代码清单1-4

一个项目中的R文件都是用来保存所有资源的引用,代码中如果要引用资源文件就是使用R文件引用他们的ID。此文件请不需要修改,当你有资源复制到项目中时,他会自动生成资源的引用ID。

1.7 调试你的项目

当然调试是必不可少的,Eclipse中的Android插件与Eclipse的调试器良好的集成在一起。为了证明这一点,下面我们来看“代码清单1-5”

复制代码
package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Object o = null;
        o.toString();
        setContentView(R.layout.main);
    }
}
复制代码

代码清单1-5

在你的代码中引入一个空指针异常,然后你会在模拟器中看见如图1-4的效果。

图1-4Android设备中出现空指针异常

我们可以在Object o = null;这一行设置一个断点(双击旁边的代码行),然后右键选择Run - > Debug As - > Android Application。然后运行调试模式,并会在断点处停下来。然后进入调试界面,你可以鼠标悬停或者观察右上角中变量的值,如图1-5所示:

图1-5Android调试界面截图

分享到:
评论

相关推荐

    node-v19.8.0-darwin-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v18.5.0-darwin-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2024年java面试题-数据库MySQL面试题第三部分

    MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL作为网站数据库。 书接上文,这是MySQL面试方面第三部分吧,本资料主要也是介绍MySQL面试方面的一些题目吧,重点挑几道高频出现的面试题!!!

    中国石油大学操作系统实验模拟进程的调度算法..zip

    中国石油大学操作系统实验模拟进程的调度算法..zip

    基于疲劳状态和分心状态检测的驾驶员监控系统研发_潘任飞.caj

    驾驶员注意力检测,驾驶员分神驾驶检测,DMS,汽车智能驾驶,智能座舱

    下载题库&amp;自动答题-2017江苏省创新学分竞赛.zip

    下载题库&amp;自动答题-2017江苏省创新学分竞赛

    node-v16.2.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    unity一个特效资源,可以直接用

    哈哈哈哈哈哈哈哈哈哈哈哈哈

    基于Android的新闻推荐系统,本科毕业设计项目。.zip

    基于Android的新闻推荐系统,本科毕业设计项目。

    代码.rar代码.rar代码.rar代码.rar代码.rar代码.rar代码.rar

    代码.rar代码.rar代码.rar代码.rar代码.rar

    node-v13.10.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python可视化分析日常记账数据总结个人消费方向

    日常记账数据是指个人或组织在日常生活中记录和管理的财务数据。它记录了每天的收入、支出和资产变动等信息,用于跟踪个人或组织的财务状况和进行预算规划。

    么么哒.mp3

    么么哒.mp3

    node-v14.15.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    中文场景文字识别技术创新大赛 (paddlepaddle).zip

    中文场景文字识别技术创新大赛 (paddlepaddle)

    图片raw转BMP易语言版本

    raw 转BMP 易语言

    node-v14.2.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v14.18.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    open62541-1.3.9.zip

    基于C语言的opcua开源库,1.3.9版本为较稳定版本,推荐使用

    基于STM32F103单片机+RA8875_emWin526_uCOSIII_Picture(液晶板载字库)程序源码.zip

    基于STM32F103单片机+RA8875_emWin526_uCOSIII(液晶板载字库)emwin程序源码,可供学习设计参考。

Global site tag (gtag.js) - Google Analytics