Android Hello World示例

在开始使用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:屏幕介于mdpihdpi之间; 大约213dpi。这不被视为“主要”密度组。 它主要用于电视机,大多数应用程序不需要它 - 为大多数应用程序提供mdpihdpi资源已足够,系统将根据需要进行扩展。此限定符是在API级别13中引入的。

Android Activity生命周期

首先,了解Activity是什么?
Activity是支持屏幕或UI的Java代码。换句话说,用户界面的构建块就是ActivityActivity类是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文件。

工作原理:


上一篇: Android应用组件 下一篇:无