购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 第一个Android程序

1.3.1 创建项目

本节使用Android Studio创建第一个Android项目。首先打开Android Studio,第一次启动会弹出快速创建项目窗口,如图1-15所示。也可以通过单击“File”→“Open ”命令打开此窗口。

选择“Start a new Android Studio project ”选项,打开创建项目向导,在弹出的窗口中选择项目路径,输入项目名称“FirstApp”,如图1-44所示。在项目配置窗口,指定公司域名,如“neusoft.edu.cn”,如图1-45所示。在目标设备选择窗口,选择“Phone and Tablet”,并设置最低SDK版本,如图1-46所示。

再添加Activity窗口,选择Blank Activity,如图1-47所示。在后续项目中,可以根据需要选择不同的Activity。在Activity设置窗口设置Activity名称、布局名称和标题,取消选择“Use a Fragment ”复选框,如图1-48所示。单击“Finish”按钮后,初始化项目,如图1-49所示。

图1-44 选择项目路径和项目名称

图1-45 项目配置

图1-46 设置目标设备版本

图1-47 添加Activity

图1-48 定义Main Activity

图1-49 项目初始化

项目创建完成后,Android Studio的窗口如图1-50所示。左侧是项目架构,右侧是代码,读者也可以根据需要进行定制。

图1-50 项目窗口

(1)MainActivity.Java

MainActivity是项目的入口,继承AppCompatActivity,主要包括 onCreate()函数、onCreateOptionsMenu()函数和onOptionsItemSelected()函数,相关代码如下:

package cn.edu.neusoft.firstapp;

import Android.os.Bundle;

import Android.support.design.widget.FloatingActionButton;

import Android.support.design.widget.Snackbar;

import Android.support.v7.app.AppCompatActivity;

import Android.support.v7.widget.Toolbar;

import Android.view.View;

import Android.view.Menu;

import Android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);

setSupportActionBar(toolbar);

FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);

fab.setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View view){

Snackbar.make(view,"Replace with your own action",Snackbar.LENGTH_LONG)

.setAction("Action",null).show();

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu){

//Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main,menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item){

//Handle action bar item clicks here.The action bar will

//automatically handle clicks on the Home/Up button,so long

//as you specify a parent activity in AndroidManifest.xml.

int id=item.getItemId();

//noinspection SimplifiableIfStatement

if(id==R.id.action_settings){

return true;

}

return super.onOptionsItemSelected(item);

}

}

onCreate()函数是在Activity初始化时调用的,通常情况下,我们需要在onCreate()中调用setContentView(int)函数填充屏幕的UI,一般通过findViewById(int)返回XML中定义的视图或组件的ID。子类在重写onCreate()方法时,必须调用父类的onCreate()方法,即super.onCreate(),否则会抛出异常。

需要特别注意的是,在onCreate()函数里要配置一些必要的信息,但并不是所有的事情都能在这里做。一个Activity启动调用的第一个函数就是onCreate,它主要负责Activity启动时一些必要的初始化工作,这个函数调用完后,这个Activity并不是已经启动了,或者是跳到前台了,而是还需要其他的大量工作。那么在一个Activity真正启动之前,任何相当耗时的动作都会导致Activity启动缓慢,特别是在onCreate里面耗时长的话可能导致极差的用户体验。

onCreateOptionsMenu函数用于初始化菜单,其中menu参数就是即将要显示的Menu实例。

onOptionsItemSelected函数用于菜单项被单击时调用,也就是菜单项的监听方法。

(2)activity_main.xml

activity_main.xml是MainActivity的布局文件,主要的控件在content_main.xml中定义,<include layout="@layout/content_main" />。

<?xml version="1.0" encoding="utf-8"?>

<Android.support.design.widget.CoordinatorLayout

xmlns:Android="http://schemas.Android.com/apk/res/Android"

xmlns:app="http://schemas.Android.com/apk/res-auto"

xmlns:tools="http://schemas.Android.com/tools"

android:layout_width="match_parent"

android:layout_depth="match_parent"

android:fitsSystemWindows="true"

tools:context="cn.edu.neusoft.firstapp.MainActivity">

<Android.support.design.widget.AppBarLayout

android:layout_width="match_parent"

android:layout_depth="wrap_content"

android:theme="@style/AppTheme.AppBarOverlay">

<Android.support.v7.widget.Toolbar

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_depth="?attr/actionBarSize"

android:background="?attr/colorPrimary"

app:popupTheme="@style/AppTheme.PopupOverlay"/>

</Android.support.design.widget.AppBarLayout>

<include layout="@layout/content_main" />

<Android.support.design.widget.FloatingActionButton

android:id="@+id/fab"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:layout_gravity="bottom|end"

android:layout_margin="@dimen/fab_margin"

android:src="@android:drawable/ic_dialog_email" />

</Android.support.design.widget.CoordinatorLayout>

(3)content_main.xml

content_main.xml 定义了"Hello World!"TextView 控件。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"

xmlns:app="http://schemas.Android.com/apk/res-auto"

xmlns:tools="http://schemas.Android.com/tools"

android:layout_width="match_parent"

android:layout_depth="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

tools:context="cn.edu.neusoft.firstapp.MainActivity"

tools:showIn="@layout/activity_main">

<TextView

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="Hello World!" />

</RelativeLayout>

上述代码虽然看起来比较复杂,但均是在创建项目时自动生成的。

1.3.2 运行项目

启动AVD后,单击Android Studio的运行按钮,如图1-51所示,弹出设备选择器。这里选择上面创建的AVD,若希望每次都使用相同设备运行该项目,勾选“Use same device for future launches”,如图1-52所示。运行效果如图1-2所示。

图1-51 单击运行按钮

图1-52 选择设备

1.3.3 项目分析

首先来看manifests目录下的AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"

package="cn.edu.neusoft.firstapp">

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:supportsRtl="true"

android:theme="@style/AppTheme">

<activity

android:name=".MainActivity"

android:label="@string/app_name"

android:theme="@style/AppTheme.NoActionBar">

<intent-filter>

<action android:name="Android.intent.action.MAIN" />

<category android:name="Android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

从以上代码中,可以看出Android配置文件采用XML作为描述语言,每个XML标签都有不同的含义,大部分的配置参数都放在标签的属性中。下面按照以上配置文件样例中的先后顺序来学习Android配置文件中主要元素与标签的用法。

AndroidManifest.xml配置文件的根元素,必须包含一个元素并且指定 xlmns:Android和package属性。xlmns:Android指定了Android的命名空间,默认情况下是“http://schemas.Android.com/apk/res/Android”;而package是标准的应用包名,也是一个应用进程的默认名称,本例中“cn.edu.neusoft.firstapp ”就是一个标准的Java应用包名。为了避免命名空间的冲突,一般会以应用的域名来作为包名。

Activity活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。标签中常用的属性有:Activity对应类名android:name,对应主题android:theme等,其他的属性用法可以参考Android SDK文档学习。另外,标签还可以包含用于消息过滤的元素,当然还有可用于存储预定义数据的元素。

本例中MainActivity作为项目的主action和LAUNCHER,是整个程序的入口。MainActivity调用setContentView,加载布局文件进行显示。

【项目延伸】

项目中添加Activity时,可以选择不同类型的Activity,如图1-47所示,在第一个Android程序中,使用的是Blank Activity。Blank Activty集成了诸如Toolbar 、Floating Bar等控件。在实际项目开发中,如果不需要使用这些控件,或者准备自己手工添加,可以选择Empty Activity。

【例1-1】 下面创建HelloAndroid 项目,使用Empty Activity。

(1)新建项目:选择“Start a new Android Studio project ”选项,打开创建项目向导,在弹出的窗口中选择项目路径,输入项目名称“HelloAndroid”,如图1-53所示。在添加activity窗口,选择Empty Activity,如图1-54所示。

图1-53 选择项目路径和项目名称

图1-54 Empty Activity

(2)修改布局文件:在配置Activity窗口使用默认的Main Activity和activity_main的布局文件名称,如图1-55所示。创建项目后,项目窗口如图1-56所示。在activity_main.xml中修改显示文本android:text="Hello Android!",单击运行按钮,项目效果如图1-57所示。

图1-55 定义MainActivity

图1-56 项目窗口

图1-57 项目运行效果

(3)效果对比:对比1.3节中的FirstApp项目,HelloAndroid项目没有了Toolbar和FloatingBar,MainActivity.java和 activity_main.xml都比较简单,在后续项目中可以按需添加相关功能。

【说明】 本书在第4 章和第5 章主要介绍布局和控件,创建 Activity 时采用的是 Blank Activity,其他章节Activity 采用的是EmptyActivity。读者可以按照自己的习惯选择适合的Activity。 4sBPOFPC99r3wvBr6qWRHIDevTlMvIOBlLiyyPNaRXh/w1HXfdGMSV0VfAx5kvcP

点击中间区域
呼出菜单
上一章
目录
下一章
×