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應用組件 下一篇:無