Android开发入门基础

2012年8月8日10:58:51 发表评论 12 views

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。本篇博客将简述Android编程入门的基础知识。主要讲述开发环境,以及一些基础知识。后续我们将逐渐讲述如何开发具体的程序信息。

一、环境准备

1.1、JDK安装

1.2、Android Studio安装

二、创建一个Android App

三、Android开发中的一些基本概念

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石。Android有四大组件(也有说六大组件的,外加Intent和Notification),分别是Activity,Service,Content Provider和BroadcastReceiver。这四大组件一起组成了完整的Android程序。我们将分别简要介绍。

3.1、Activity

Activity中文是活动的意思,它在Android里面是指一个完整的占了一个屏幕的页面(上下滑动的内容也算这个界面内的内容,所以它的概念可以理解成类似网站的一个网页一样)。Activity允许显示一些控件、视图,并可以监听处理用户的事件,做出响应等。Activity之间通过Intent通信(调用、跳转等动作)。

一个Activity实际上是一个XML文件,它可以被Android系统以可视化的界面展现。而每一个Activity都与一个Java后台程序相联系,这个Java程序可以控制这个页面的启动、展示以及数据等信息。页面上展示的内容可以通过Activity本身的xml文件配置,也可以由相联系的Java文件来控制。Activity对应哪个Java程序是通过ID进行连接的,后面会说明。

3.2、Service

Service是服务的意思。它是Android程序中“不可见”的部分,但是它负责更新数据源、触发通知等。它是一种没有界面的长生命周期的适合监控或者在后台运行的程序。最佳的例子是多媒体播放器。如百度百科的例子,多媒体播放器程序可能含有一个或多个Activity,用户通过这些 Activity选择并播放音乐。然而,音乐回放并不需要一个Activity来处理,因为用户可能会希望音乐一直播放下去,即使退出了播放器去执行其它程序。为了让音乐一直播放,多媒体播放器Activity可能会启动一个Service在后台播放音乐。Android系统会使音乐回放Service一直运行,即使在启动这个Service的Activity退出之后。

Android服务有两种:一是本地服务,另一种是远程服务。前者只能由托管服务的应用程序访问,后者是指由设备上其他应用程序进行远程访问的服务。

3.3、Content Provider

Content Provider是指内容提供器。App运行的时候需要很多外部数据作为支撑,这些数据一般由内容提供器存储、共享。比如,我们可以配置自己的Content Provider来存取其他应用程序,或者是通过其他应用程序给出的Content Provider来获取他们的数据。系统本身也提供了一些Content Provider,如联系人信息等。

这些数据可以存储在文件系统、SQLite数据库或者其他一些媒介里。

3.4、BroadcastReceiver

你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

除了这四个组件外,Intent也是一种非常重要的组件,它是各种组件之间通信的桥梁,可以执行很多相关的任务,我们在Android开发入门基础知识——Intent详解中有详细介绍。而Notification是通知组件,主要是和推送用户信息有关。

四、Android App项目中的文件(夹)简介

如下图所示,Android项目中的主要文件及文件夹包括几个。

Android开发入门基础
图1 Android项目文件(夹)目录

4.1、AndroidManifest.xml文件

该文件是在mainfests文件夹下面,叫做清单文件,它描述了整个项目的信息,包括项目名称、SDK版本等等。假设我们项目的清单文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.localgo.localgo">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".DisplayMessageActivity"></activity>
        <activity android:name=".ProfileActivity"></activity>
    </application>
</manifest>

例如,在这里,第3行是包的名称。从第6行开始,以android开头的行描述本项目程序的信息,比如第6行到第11行是描述一些图标,主题信息,里面引用了后面的资源文件夹中的values文件夹下面的资源信息。以activity开头的行则描述本程序涉及到哪些界面(翻译为活动,一个Activity活动对应一个屏幕的UI界面)。例如第12行描述了本项目的MainActivity页面。这个活动下面设置了意图过滤(intent-filter,为啥叫这个我也不清楚)的信息,它描述了该页面的一些信息,比如这个android.intent.action.MAIN表明这个活动是本程序的入口页面。你在应用程序中的每个活动必须在AndroidManifest.xml 文件中声明。

4.2、java文件夹

这个不用多说了,主要是存放java源程序的地方。注意我们这里有一些以Activity结尾的程序文件,每一个文件其实对应了一个Activity的页面。也就是和下面资源文件夹(res)中的layout里面的内容绑定的。具体操作我们后面会说。

4.3、res文件夹(提供资源)

我们应该始终外部化应用资源,例如图像和代码中的字符串,这样有利于您单独维护这些资源。 此外,还应该为特定设备配置提供备用资源,方法是将它们分组到专门命名的资源目录中。 在运行时,Android 会根据当前配置使用适当的资源。例如,我们可能需要根据屏幕尺寸提供不同的 UI 布局,或者根据语言设置提供不同的字符串。

外部化应用资源后,即可使用在项目 R 类中生成的资源 ID 访问这些资源。有关如何在应用中使用资源,我们将在访问资源中讨论。

而资源一般都是在这个res文件夹下面,包括图片、布局文件、菜单等等。我们将分别介绍。

4.3.1、drawable资源

drawable英语是可拉伸的意思,在这里我们可以理解为存放位图的文件夹,因此称之为位图资源。也就是存放jpg、png等图片资源的文件夹了。如下图所示(注意:这里的drawable没有区分不同分辨率的图片。一般情况需要根据高中低三种不同分辨率放置三种不同清晰度的图片,便于系统调用,同时也有可能需要存放不同尺寸的图片),这里有两种drawable资源,一种是我们常见的图像资源,如ec.jpg、hfut.jpg等。另一种是xml类型的drawable资源。前者叫Image Asset,后者叫Vector Asset。前面是图像资源,拥有固定大小和尺寸,因此放大和缩小都有问题。一般而言,这种资源要存放多个不同尺寸的版本供调用。而后者是响亮资源,它其实是一系列命令,告诉你应该如何画图。因此这种资源可以适应不同尺寸或者分辨率的情况。因为系统可以根据这些命令来画图。

Android开发入门基础
图 2
比如下面这个是ic_card_giftcard_black_24dp.xml文件的内容,它其实描述的是一个黑色的公文包。代码中出了常见的尺寸等信息,那个pathData就是描述形状的代码。Android Studio本身已经自带了一些,右键单击drawable文件夹,选择New-Vector Assett就能看到了。其他的可以去网上搜索,正常情况下,大神们的图已经够我们使用了。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M20,6h-2.18c0.11,-0.31 0.18,-0.65 0.18,-1 0,-1.66 -1.34,-3 -3,-3 -1.05,0 -1.96,0.54 -2.5,1.35l-0.5,0.67 -0.5,-0.68C10.96,2.54 10.05,2 9,2 7.34,2 6,3.34 6,5c0,0.35 0.07,0.69 0.18,1L4,6c-1.11,0 -1.99,0.89 -1.99,2L2,19c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2L22,8c0,-1.11 -0.89,-2 -2,-2zM15,4c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM9,4c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM20,19L4,19v-2h16v2zM20,14L4,14L4,8h5.08L7,10.83 8.62,12 11,8.76l1,-1.36 1,1.36L15.38,12 17,10.83 14.92,8L20,8v6z"/>
</vector>

Android开发入门基础
4.3.2、layout资源

layout文件夹存放的是布局资源。布局也就是指Android里面的活动和视图了。在Android中,占用一个屏幕的UI界面称之为Activity(活动),页面中的按钮、标签、文本字段等称之为View(视图)。一个活动通常包含一个或者多个视图(也就是一个页面里面有按钮啊,文本啊之类的东西)。这里的布局文件都是XML文件,因为Android中视图都是从XML文件加载的。里面描述了位置、大小等等视图信息。布局资源下每个文件都将根据其文件名(不包含扩展名)生成一个唯一的常量,这些常量也就是其ID,可以通过某些手段与java源文件绑定,或者被其他页面调用。
layout的文件都是xml文件,在每一个xml文件中,我们可以定义一些TextView、ImageView,以及其他的等等。

4.3.3、values资源

values资源是Android中存放数组、颜色、尺寸、字符串和样式的文件夹。通常有如下文件:

/res/values/strings.xml
/res/values/colors.xml
/res/values/dimens.xml
/res/values/attrs.xml
/res/values/styles.xml

其实就是统一存放所有的变量的地方,比如主题颜色、app名称、Logo的样式等。在values资源下统一定义可以使得我们在各个地方都调用同样的资源,在修改的时候也只要更改一处即可。
在values这些资源定义也很简单,主要以定义string为例,如下,尖括号定义资源类型,name表示资源名称,里面表示内容:

<string name="app_name">乐购</string>
<string name="edit_message">请输入您想查询的地点</string>

4.3.4、minmap

minmap是Android软件存放程序启动图标的文件夹。一般地它只存放这个启动图标(就是桌面图标)。

五、Android中的资源访问(R类/R.java)

在上一节中我们说了Android开发,应当始终外部化资源,并将这些资源存放在res文件夹中。这样有利于我们单独维护这些资源。这一节我们将描述资源的访问方式。在Android开发中,所有的外部资源都通过其资源的ID来访问,而所有的资源ID都在项目中R类中定义。而R.java这个类是由aapt工具自动生成的,用户本身不用修改添加。只要在资源中申明了ID,那么R类会自动将该资源添加到其中。

编译应用时,aapt 会生成 R 类,其中包含您的 res/ 目录中所有资源的资源 ID。 每个资源类型都有对应的 R 子类(例如,R.drawable 对应于所有可绘制对象资源),而该类型的每个资源都有对应的静态整型数(例如,R.drawable.icon)。这个整型数就是可用来检索资源的资源ID。

定义资源ID主要包括两个部分,一个是资源类型如string、drawable和layout等。另一个是资源名称,不包括其扩展名(当然也可以是xml中android:name属性中的值)。

访问这些资源有两种方式,一种是在Java程序中,一种是在XML文件中。

//Java程序中访问资源,如下面的程序设置内容显示为某个activity,可以使用R.layout.activity名称的方式。其中layout是资源类型,后面的是资源名称
setContentView(R.layout.activity_display_message);
#这种方式是在XML文件中访问资源,使用@开头表示什么类型,然后价格斜杠后面写上资源名称
@string/hello

参考1:https://developer.android.com/training/index.html

参考2:https://www.w3cschool.cn/android/android-hki320om.html

参考3:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html

  • yiisaa
  • 这是我的微信扫一扫
  • weinxin
  • zhengweiqiangcom
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: