一、提要
看來Android開發並沒有我想象的那麼簡單,至少比Qt會費勁一些。
今天我們要做的就是在上一篇的基礎上完成一個更為複雜的Helloworld,設設計到的知識點有:
Activity的概念,Button的使用,建立按鈕監聽,intent的使用,Menu的使用。
我們最終要實現的是效果如下:
二、Activity
一個Activity是一個應用程式組件,提供一個螢幕,使用者可以用來互動為了完成某項任務,例如撥號、拍照、發送email、看地圖。每一個activity被給予一個視窗,在上面可以繪製使用者介面。視窗通常充滿螢幕,但也可以小於螢幕而浮於其它視窗之上。
一個應用程式通常由多個activities組成,他們通常是松耦合關係。通常,一個應用程式中的activity被指定為"main"activity,當第一次啟動應用程式的時候呈現給使用者的那個activity。每一個activity然後可以啟動另一個activity為了完成不同的動作。每一次一個activity啟動,前一個activity就停止了,但是系統保留activity在一個棧上(“back stack”)。當一個新activity啟動,它被推送到棧頂,取得使用者焦點。Back Stack符合簡單“後進先出”原則,所以,當使用者完成當前activity然後點擊back按鈕,它被彈出棧(並且被摧毀),然後之前的activity恢複。
當一個activity因新的activity啟動而停止,它被通知這種狀態轉變通過activity的生命週期回呼函數。有許多回呼函數一個activity可能會收到,源於它自己的狀態變化-無論系統建立它、停止它、恢複它、摧毀它-並且每個回調提供你完成適合這個狀態的指定工作的機會。例如,當停止的時候,你的activity應該釋放任何大的對象,例如網路資料庫串連。當activity恢複,你可以重新獲得必要的資源和恢複被中斷的動作。這些狀態轉換都是activity的生命週期的部分。
建立Activity的要點
1.一個Activity就是一個類,並且這個類要繼承Activity;
2.需要複寫onCreate方法;
3.每一個Activity都需要在AndroidManifest.xml檔案中進行配置;
4.為每一個Activity添加必要的控制項,Activity可以看作一個控制項的容器;
三、intent
Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。
因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關資訊,實現調用者與被調用者之間的解耦。
四、代碼清單
//MainActivity.java
package com.example.activity_01;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.view.View.OnClickListener;public class MainActivity extends Activity {private EditText myTextEdit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView myTextView=(TextView)findViewById(R.id.myTextView); myTextEdit=(EditText)findViewById(R.id.myEditText); Button myButton=(Button)findViewById(R.id.myButton); System.out.println("Begin"); myTextView.setText("Input your name!"); myButton.setText("confirm"); myButton.setOnClickListener(new ButtonListener()); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,1,1,R.string.exit); menu.add(0,2,2,R.string.about); // getMenuInflater().inflate(R.menu.activity_main, menu); return super.onCreateOptionsMenu(menu); } @Overridepublic boolean onMenuItemSelected(int featureId, MenuItem item) {// TODO Auto-generated method stub if(item.getItemId()==1) finish(); if(item.getItemId()==2) new AlertDialog.Builder(this) .setTitle("About") .setMessage("Powerd By Empty.") .show(); return super.onMenuItemSelected(featureId, item);}class ButtonListener implements OnClickListener{ @Overridepublic void onClick(View view0) {// TODO Auto-generated method stubString val=myTextEdit.getText().toString(); //產生一個Intent對象 Intent intent=new Intent(); //設定傳遞的參數 intent.putExtra("val", val); //從Activity IntentTest跳轉到Activity IntentTest01 intent.setClass(MainActivity.this,SecondActivity.class); //啟動intent的Activity MainActivity.this.startActivity(intent); System.out.println("ClickMe");} }}
SecondActivity.java
package com.example.activity_01;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class SecondActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); Intent intent=getIntent(); String value=intent.getStringExtra("val"); TextView et=(TextView)findViewById(R.id.textView1); et.setText("Hello,"+value); } }
avtivity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/myTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/myEditText" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/myButton" android:layout_width="fill_parent" android:layout_height="wrap_content" /></LinearLayout>
sencond_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" > </TextView></LinearLayout>
別忘了在manifest裡面將Activity註冊,不然會報錯。
六、參考資料
<activity android:name="SecondActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:windowSoftInputMode="adjustPan"> </activity>
Android developers:http://developer.android.com/training/basics/firstapp/running-app.html google的官方教程,非常推薦。
雷一的部落格:http://www.cnblogs.com/rayee/tag/Android/ 素然只有四篇,但作為入門教程還是很不錯的。
Android 開發教程:網上流傳的教程,缺點是有點老。