文章出處

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

之前各講中,分別講解了安卓的開發環境、架構和基本概念。從這一講開始,我將制作一個簡單的應用,并通過逐步升級它的功能,連帶出安卓開發的多個情境。

《維納斯的誕生》是文藝復興早期名畫。相傳美神維納斯從海的泡沫中誕生,波提切利用大膽的筆觸描繪這一古典神話。畫面洋溢著對人體和美的熱愛。如果在中世紀或者西班牙宗教審判時期,這幅畫足夠波提切利上火刑架了。 

 

任務描述

我將制作一個簡單的歡迎頁面。頁面中有一個按鈕。點擊后,將顯示制作人姓名。

知識點包括:

  • 新建Activity:通過繼承Activity類,來創建一個新的類。
  • 頁面布局:LinearLayout
  • 按鈕點擊監:OnClickListener
  • 臨時顯示簡單的文字信息:Toast用于顯示簡單的文字信息

 

編寫視圖

按照安卓第一夜 第一個應用中的介紹,創建一個Android項目Vamei,項目包的名字為me.vamei.vamei。

我將要創建一個頁面。這個頁面的視圖定義在res/layout/activity_main.xml中。從安卓第四夜 概念漫游(下)中,我們已經知道,這個XML文件描述了一個視圖樹。內容如下:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Welcome" />

    <Button
        android:id="@+id/author"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn_text" />

</LinearLayout>

 

 

這里采用了線性布局LinearLayout,根據它的orientation的屬性"vertical",視圖元素將從上向下排列。線性布局中包含一個TextView,以及一個Button按鈕。TextView用于顯示文本"Welcome"。

視圖元素有layout_widthlayout_height屬性,分別定義元素的寬度和高度。這兩個屬性可以是具體的數值,比如"10px",也可以是:

  • "match_parent":與母元素相同
  • "wrap_content":與包含的內容相同,如文字本身的尺寸

Button還有一個id,即author。在程序中我們可以借用這個id來引用該按鈕。Button上文本是一個字符串。注意符號@,表示這里引用了一個名為btn_text的字符資源。我們當然可以像"Welcome"那樣直接使用一個字符串,但引用字符資源有額外的好處。我們可以在程序的多處重復利用的同一個資源條目,從而便于修改。該字符串保存在res/values/strings.xml中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Vamei</string>
    <string name="action_settings">Settings</string>
    <string name="author">vamei</string>    
    <string name="btn_text">who am I</string>
</resources>

可以看到,名為btn_text的字符串資源為"who am I"。

 

 

編寫Activity

上面XML定義的視圖是靜態的。想要實現動態的應用,我還需要一個配套的Activity。在src文件夾下的me.vamei.vamei包中,會有一個MainActivity.java。這個Java文件中包含一個MainActivity類,繼承自Activity。我將其中的代碼修改為:

package me.vamei.vamei;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

// attach view tree to the activity setContentView(R.layout.activity_main);
// monitor "click" action for the button Button btn
= (Button) findViewById(R.id.author); btn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Toast.makeText(MainActivity.this, getString(R.string.author), Toast.LENGTH_LONG).show(); } }); } }

在這個類中,我只包含了一個onCreate()方法。當應用啟動時,安卓將調用onCreate()方法。該方法有一個Bundle類型的參數,記錄Activity的狀態,我將在以后講解。

onCreate()方法中主要做了兩件事:

  1. 連接Activity與視圖樹。setContentView()方法為Activity增加了視圖樹。這里引用了activity_main.xml中的視圖樹。可以注意到,安卓中用R來代表資源。
  2. 監聽按鈕的點擊事件。因為我們在activity_main.xml中定義了按鈕的id,所以可以使用findViewById方法,便捷的引用按鈕。View元素可以使用setOnClickListner()方法,為點擊事件增加OnClickListener類型的監聽對象。

用戶點擊按鈕后,安卓將執行監聽對象的onClick()方法。該方法利用Toast,顯示一段文本,即R.string.author對應的字符串資源。在res/values/strings.xml中,已經定義該字符串為"vamei"。Toast是一個彈出的文字顯示框。makeText()的三個參數分別為彈出框的Context、要顯示的字符串和顯示時間。

 

注冊Activity

已經完成的Activity需要在AndoriManifest.xml中注冊。這是安卓應用的配置文件,可以進行許多權限相關的設定。我的AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.vamei.vamei"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="me.vamei.vamei.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

可以看到<activity>標簽中注冊了MainActivity。<Activity>中還定義了該Activity的Intent Filter,即愿意接收的Intent。

 

運行

運行應用,效果如下:

好吧,這個界面離維納斯還有點距離…… 

 

總結

一個單頁Activity

LinearLayout, TextView, Button

layout_width, layout_height, "wrap_content", "match_parent"

setContentView()

setOnClickListener()

Toast.maketext()

<activity>

 

歡迎繼續閱讀“Java快速教程”系列文章

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()