鍍金池/ 教程/ Android/ Android Hello World示例
Android 應(yīng)用組件
使用布局文件自定義Android組件
Android通知
Android主題示例
Android JetPlayer實(shí)例
Android MediaPlayer(多媒體播放)
Android AbsoluteLayout
Android FrameLayout
Android Gestures/手勢(shì)
Android AutoCompleteTextView(自動(dòng)完成)實(shí)例
Android 資源組織和訪問(wèn)
Android ListView
Android GridView
Android數(shù)據(jù)備份
Android撥打電話(huà)
Android發(fā)送短信/SMS
Android ProgressDialog
SimpleCursorAdapter
Android發(fā)送電子郵件
Android Activity
Android TextView
Android事件處理
Android TableLayout
Android加載Spinner
Android內(nèi)容提供者
Android自定義字體
Android Service
Android CheckBox
Android Intent過(guò)濾器
Android LinearLayout
Android登錄實(shí)例
Android RadioButton
Android樣式和主題
Android自定義組件及屬性
Android UI控件
Android Animation(動(dòng)畫(huà))實(shí)例
Android Camera(攝像頭)
Android ToggleButton
Android Clipboard(復(fù)制/剪貼板)
Android音頻捕獲(錄音)
發(fā)布Android應(yīng)用
Android Alertdialog(警告對(duì)話(huà)框)
Android圖片效果
Android內(nèi)部存儲(chǔ)
Android基于位置服務(wù)
Android RadioGroup
Android AutoCompleteTextView
Android Bluetooth(藍(lán)牙)實(shí)例
Android RelativeLayout
Android最佳實(shí)踐
Android本地化
Android自定義組件
Android教程
Android 架構(gòu)
Android UI布局
Android Button
Android Hello World示例
Android音頻管理器實(shí)例
ArrayAdapter
Android拖放
Android碎片/片段
Android圖片切換
Android JSON解析器
Android開(kāi)發(fā)環(huán)境搭建
Android Spinner
Android樣式示例
使用活動(dòng)代碼自定義Android組件
Android ImageButton
Android EditText
Android廣播接收器

Android Hello World示例

在開(kāi)始使用Android SDK編寫(xiě)第一個(gè)示例之前,必須確保已經(jīng)按照Android環(huán)境設(shè)置教程中的說(shuō)明正確設(shè)置了您的Android開(kāi)發(fā)環(huán)境。

下面來(lái)看看如何編寫(xiě)一個(gè)簡(jiǎn)單的Android應(yīng)用程序,它將打印“Hello World!”。

注:理解這篇教程,對(duì)后面的學(xué)習(xí)非常重要。了解項(xiàng)目中每個(gè)目錄和每個(gè)文件的功能和作用。

創(chuàng)建Android應(yīng)用程序

第一步是使用Android Studio創(chuàng)建一個(gè)簡(jiǎn)單的Android應(yīng)用程序。 當(dāng)點(diǎn)擊Android Studio圖標(biāo)啟動(dòng)完成時(shí),它將顯示如下所示的屏幕 -

可以通過(guò)調(diào)用Start a new Android Studio Project 來(lái)開(kāi)始創(chuàng)建應(yīng)用程序開(kāi)發(fā)。 在新的安裝框架中應(yīng)詢(xún)問(wèn)應(yīng)用程序名稱(chēng),包裝信息和項(xiàng)目的位置。

輸入應(yīng)用程序名稱(chēng)(HelloWorld)后,選擇應(yīng)用程序運(yùn)行的Android目標(biāo)設(shè)備,在這里需要指定最小的SDK,在這個(gè)教程中,選擇最小SDK為 API 21:Android 5.0(Lollipop) -

下一級(jí)安裝應(yīng)該包含選擇移動(dòng)設(shè)備的活動(dòng),它指定應(yīng)用程序的默認(rèn)布局。

選擇一個(gè)空的Activity,如下所示 -

配置Activity,默認(rèn)即可,點(diǎn)擊完成。如下所示 -

在完成之后,開(kāi)發(fā)開(kāi)發(fā)工具將顯示如下界面,我們可以開(kāi)始編寫(xiě)應(yīng)用程序的代碼了。

運(yùn)行應(yīng)用程序

下面來(lái)看看,如何運(yùn)行這個(gè)"Hello World!" 應(yīng)用程序。假設(shè)您在創(chuàng)建環(huán)境的時(shí)候創(chuàng)建了AVD。 要從Android Studio運(yùn)行應(yīng)用程序,請(qǐng)打開(kāi)項(xiàng)目的一個(gè)活動(dòng)文件,然后單擊工具欄上的“運(yùn)行app”圖標(biāo)。如下圖中箭頭指向的位置 -

選擇發(fā)布目標(biāo),如下圖所示 -

注意:在這個(gè)過(guò)程中,Android Studio 可能需要安裝一些其它的依懶組件,這就要求必須能連接到互聯(lián)網(wǎng)絡(luò)了。安裝過(guò)程如下 -

Android Studio 在配置的AVD上安裝應(yīng)用程序并啟動(dòng)它,如果您的設(shè)置和應(yīng)用程序一切正常,它將顯示以下“模擬器”窗口 -

Android項(xiàng)目結(jié)構(gòu)概述

以下是Android Studio中的的項(xiàng)目結(jié)構(gòu)圖:

下面對(duì)上面文件或目錄的解釋 -

編號(hào) 文件或目錄 描述
1 AndroidManifest.xml 這是清單文件,它描述了應(yīng)用程序的基本特征并定義了它的每個(gè)組件。
2 java 這包含項(xiàng)目的.java源文件。 默認(rèn)情況下,它包含一個(gè)具有活動(dòng)類(lèi)的MainActivity.java源文件,該Activity類(lèi)在應(yīng)用程序使用應(yīng)用程序圖標(biāo)啟動(dòng)時(shí)運(yùn)行。
3 res/drawable 以前的Android版本使用這個(gè)文件夾來(lái)存儲(chǔ)圖像,當(dāng)前版本使用mipmap文件夾來(lái)存儲(chǔ)圖像。這個(gè)目錄幾乎不再使用。
4 res/layout 這是定義應(yīng)用程序用戶(hù)界面的文件的目錄。
5 res/menu 包含將顯示在操作欄上的項(xiàng)目的XML菜單文件夾
6 res/mipmap 使用來(lái)包含mipmap圖像
7 res/values 這是包含資源集合(如字符串和顏色定義)的其他各種XML文件的目錄。

1. AndroidManifest.xml

無(wú)論您作為應(yīng)用程序的一部分開(kāi)發(fā)什么組件,都必須在AndroidManifest.xml中聲明其所有組件。這個(gè)文件作為Android OS和應(yīng)用程序之間的接口,所以如果沒(méi)有在這個(gè)文件中聲明你的組件,那么操作系統(tǒng)將不會(huì)考慮它。 例如,默認(rèn)清單文件將如下面的文件所示 -



2. res/mipmap

需要更多地了解mipmap文件夾中的圖像,請(qǐng)參閱下面的圖像,mipmap文件夾中有一個(gè)圖像文件。

在使用Android應(yīng)用程序時(shí)偶爾遇到的一個(gè)問(wèn)題是,比如看到的圖像比較模糊,像素化或笨拙地拉伸。 解決此問(wèn)題的方法是為Android支持的每種密度創(chuàng)建一個(gè)可繪制的文件夾,并將正確縮放的圖像放在每個(gè)文件夾中。 Android支持6種不同的密度范圍(以每英寸點(diǎn)數(shù)衡量):

  • ldpi:低密度屏幕; 大約120dpi
  • mdpi:中等密度(在傳統(tǒng)的HVGA)屏幕上; 大約160dpi。
  • hdpi:高密度屏幕; 大約240dpi。
  • xhdpi:超高密度屏幕; 大約320dpi。 在API級(jí)別8中添加
  • nodpi:這可以用于位圖資源,不想縮放到匹配設(shè)備密度。
  • tvdpi:屏幕介于mdpihdpi之間; 大約213dpi。這不被視為“主要”密度組。 它主要用于電視機(jī),大多數(shù)應(yīng)用程序不需要它 - 為大多數(shù)應(yīng)用程序提供mdpihdpi資源已足夠,系統(tǒng)將根據(jù)需要進(jìn)行擴(kuò)展。此限定符是在API級(jí)別13中引入的。

Android Activity生命周期

首先,了解Activity是什么?
Activity是支持屏幕或UI的Java代碼。換句話(huà)說(shuō),用戶(hù)界面的構(gòu)建塊就是ActivityActivity類(lèi)是Android中的一個(gè)預(yù)定義類(lèi),每個(gè)擁有UI的應(yīng)用程序都必須繼承它來(lái)創(chuàng)建窗口。
例如,MainActivity類(lèi)是一個(gè)Activity,它從庫(kù)中的Activity類(lèi)擴(kuò)展而來(lái)。 下圖說(shuō)明了一個(gè)Activity的生命周期。

Activity的一個(gè)生命周期描述了一個(gè)Activity開(kāi)始啟動(dòng)后的進(jìn)程,直到應(yīng)用程序關(guān)閉。 包括Activity暫時(shí)停止的進(jìn)程,恢復(fù)等等。

為了更容易理解,可以修改MainActivity類(lèi)的代碼,覆蓋onStart(),onResume()等方法,添加顯示方法已經(jīng)運(yùn)行的消息。重新運(yùn)行應(yīng)用程序,看看會(huì)發(fā)生什么?

package com.yiibai.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);
    }
}

重新運(yùn)行應(yīng)用程序,并且看到記錄在logcat窗口上的消息。

可以將篩選器設(shè)置為logcat,只顯示日志記錄的消息。

過(guò)濾器名稱(chēng):My Filter
日志標(biāo)記(正則表達(dá)式):MyMessage

現(xiàn)在,logcat 窗口只顯示指定的消息。

Android應(yīng)用程序如何運(yùn)行?

您已經(jīng)成功運(yùn)行了第一個(gè)Android應(yīng)用程序,現(xiàn)在來(lái)回顧一下從應(yīng)用程序調(diào)用以來(lái)Android如何運(yùn)行。

在“項(xiàng)目”窗口中看到的不是涉及創(chuàng)建應(yīng)用程序的所有組件。有些組件是由編譯器程序自動(dòng)生成的。 而且它不顯示在項(xiàng)目窗口上。 例如,根據(jù)項(xiàng)目中源文件的結(jié)構(gòu),編譯器將創(chuàng)建一個(gè)R.java 源文件,該文件為項(xiàng)目上的資源定義常量。
要在Android Studio上查看R.java 文件,請(qǐng)打開(kāi)MainActivity類(lèi),右鍵單擊R.layout.main_activity,然后選擇執(zhí)行(Go to / Implementation)

R.java類(lèi)中定義的常量是根據(jù)Project中的資源來(lái)創(chuàng)建的:

因此,在項(xiàng)目的某個(gè)地方,可以使用常量來(lái)引用項(xiàng)目中的資源。例如,R.layout.activity_main是一個(gè)常量,它表示res/layout文件夾中的activity_main.xml文件。

工作原理: