在开始使用Android SDK编写第一个示例之前,必须确保已经按照Android环境设置教程中的说明正确设置了您的Android开发环境。
下面来看看如何编写一个简单的Android应用程序,它将打印“Hello World!”。
注:理解这篇教程,对后面的学习非常重要。了解项目中每个目录和每个文件的功能和作用。
创建Android应用程序
第一步是使用Android Studio创建一个简单的Android应用程序。 当点击Android Studio图标启动完成时,它将显示如下所示的屏幕 -
可以通过调用Start a new Android Studio Project 来开始创建应用程序开发。 在新的安装框架中应询问应用程序名称,包装信息和项目的位置。
输入应用程序名称(HelloWorld)后,选择应用程序运行的Android目标设备,在这里需要指定最小的SDK,在这个教程中,选择最小SDK为 API 21:Android 5.0(Lollipop) -
下一级安装应该包含选择移动设备的活动,它指定应用程序的默认布局。
选择一个空的Activity
,如下所示 -
配置Activity
,默认即可,点击完成。如下所示 -
在完成之后,开发开发工具将显示如下界面,我们可以开始编写应用程序的代码了。
运行应用程序
下面来看看,如何运行这个"Hello World!"
应用程序。假设您在创建环境的时候创建了AVD。 要从Android Studio运行应用程序,请打开项目的一个活动文件,然后单击工具栏上的“运行app”图标。如下图中箭头指向的位置 -
选择发布目标,如下图所示 -
注意:在这个过程中,Android Studio 可能需要安装一些其它的依懒组件,这就要求必须能连接到互联网络了。安装过程如下 -
Android Studio 在配置的AVD上安装应用程序并启动它,如果您的设置和应用程序一切正常,它将显示以下“模拟器”窗口 -
Android项目结构概述
以下是Android Studio中的的项目结构图:
下面对上面文件或目录的解释 -
编号 | 文件或目录 | 描述 |
---|---|---|
1 | AndroidManifest.xml |
这是清单文件,它描述了应用程序的基本特征并定义了它的每个组件。 |
2 | java |
这包含项目的.java 源文件。 默认情况下,它包含一个具有活动类的MainActivity.java 源文件,该Activity 类在应用程序使用应用程序图标启动时运行。 |
3 | res/drawable |
以前的Android版本使用这个文件夹来存储图像,当前版本使用mipmap 文件夹来存储图像。这个目录几乎不再使用。 |
4 | res/layout |
这是定义应用程序用户界面的文件的目录。 |
5 | res/menu |
包含将显示在操作栏上的项目的XML菜单文件夹 |
6 | res/mipmap |
使用来包含mipmap 图像 |
7 | res/values |
这是包含资源集合(如字符串和颜色定义)的其他各种XML文件的目录。 |
1. AndroidManifest.xml
无论您作为应用程序的一部分开发什么组件,都必须在AndroidManifest.xml
中声明其所有组件。这个文件作为Android OS和应用程序之间的接口,所以如果没有在这个文件中声明你的组件,那么操作系统将不会考虑它。 例如,默认清单文件将如下面的文件所示 -
2. res/mipmap
需要更多地了解mipmap
文件夹中的图像,请参阅下面的图像,mipmap
文件夹中有一个图像文件。
在使用Android应用程序时偶尔遇到的一个问题是,比如看到的图像比较模糊,像素化或笨拙地拉伸。 解决此问题的方法是为Android支持的每种密度创建一个可绘制的文件夹,并将正确缩放的图像放在每个文件夹中。 Android支持6种不同的密度范围(以每英寸点数衡量):
- ldpi:低密度屏幕; 大约120dpi。
- mdpi:中等密度(在传统的HVGA)屏幕上; 大约160dpi。
- hdpi:高密度屏幕; 大约240dpi。
- xhdpi:超高密度屏幕; 大约320dpi。 在API级别8中添加
- nodpi:这可以用于位图资源,不想缩放到匹配设备密度。
- tvdpi:屏幕介于mdpi和hdpi之间; 大约213dpi。这不被视为“主要”密度组。 它主要用于电视机,大多数应用程序不需要它 - 为大多数应用程序提供mdpi和hdpi资源已足够,系统将根据需要进行扩展。此限定符是在API级别
13
中引入的。
Android Activity生命周期
首先,了解Activity是什么?Activity
是支持屏幕或UI的Java代码。换句话说,用户界面的构建块就是Activity
。 Activity
类是Android中的一个预定义类,每个拥有UI的应用程序都必须继承它来创建窗口。
例如,MainActivity
类是一个Activity
,它从库中的Activity
类扩展而来。 下图说明了一个Activity
的生命周期。
Activity
的一个生命周期描述了一个Activity
开始启动后的进程,直到应用程序关闭。 包括Activity
暂时停止的进程,恢复等等。
为了更容易理解,可以修改MainActivity
类的代码,覆盖onStart()
,onResume()
等方法,添加显示方法已经运行的消息。重新运行应用程序,看看会发生什么?
package com.zaixian.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
public static final String TAG ="MyMessage";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Print Log
Log.i(TAG,"onCreate");
}
@Override
protected void onStop() {
super.onStop();
// Print Log
Log.i(TAG,"onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
// Print Log
Log.i(TAG,"onDestroy");
}
@Override
protected void onPause() {
super.onPause();
// Print Log
Log.i(TAG,"onPause");
}
@Override
protected void onResume() {
super.onResume();
// Print Log
Log.i(TAG,"onResume"); }
@Override
protected void onStart() {
super.onStart();
// Print Log
Log.i(TAG,"onStart");
}
@Override
protected void onRestart() {
super.onRestart();
// Print Log
Log.i(TAG,"onRestart"); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// Print Log
Log.i(TAG, "onCreateOptionsMenu");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Print Log
Log.i(TAG, "onOptionsItemSelected");
// 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();
return super.onOptionsItemSelected(item);
}
}
重新运行应用程序,并且看到记录在logcat
窗口上的消息。
可以将筛选器设置为logcat
,只显示日志记录的消息。
过滤器名称:My Filter
日志标记(正则表达式):MyMessage
现在,logcat 窗口只显示指定的消息。
Android应用程序如何运行?
您已经成功运行了第一个Android应用程序,现在来回顾一下从应用程序调用以来Android如何运行。
在“项目”窗口中看到的不是涉及创建应用程序的所有组件。有些组件是由编译器程序自动生成的。 而且它不显示在项目窗口上。 例如,根据项目中源文件的结构,编译器将创建一个R.java 源文件,该文件为项目上的资源定义常量。
要在Android Studio上查看R.java 文件,请打开MainActivity
类,右键单击R.layout.main_activity
,然后选择执行(Go to / Implementation)
在R.java类中定义的常量是根据Project中的资源来创建的:
因此,在项目的某个地方,可以使用常量来引用项目中的资源。例如,R.layout.activity_main
是一个常量,它表示res/layout
文件夹中的activity_main.xml
文件。
工作原理: