隨着Android的越炒越熱和各種應用的不斷推出,自己也比較巧合的在去年12月份寬帶續費時給送了個電信的Android系統定制機——算是促使我提前了Android開發的學習計划,並給我提供了一個開發測試的'場地'(手機),也更增強了我學習Android程序開發的興趣——別的市場前景等先暫且不說,至少我學會了,可以做個程序自己用。閑話少說,Android程序開發學習筆記這個系列,我將盡量讓每篇博客保持統一的風格,在開始分享學習經驗之前列出這篇博客主要講些什么——知識點,也力求以簡短明了的講述,讓正在學習Android程序開發的朋友們能更快、更准確的了解到你想知道的,不過我也知道即使寫的再'好',可能還是有人感覺沒有講清楚或講到正點上,希望大家能多提意見,讓這個系列能更具可讀性!
本文知識要點:
1.3 Activity之間跳轉簡單傳值,Intent的簡單使用
1.4 控件事件的綁定
1.1 Android應用程序目錄結構、文件夾及其文件說明
原本想在上圖中直接添加批注,但感覺比較麻煩且空間小不容易說清楚,下面就針對上圖中的幾個紅色區域重點說明下:
R.java——此文件是應用程序資源(Resource)類,包括控件id,layout,strings,drawable,以方便在整個應用程序中對資源的使用和統一管理;此類是自動生成的,不要手動修改!
res文件夾下的 以drawable開頭的文件夾分別放的是高(h)、低(l)、中(m)不同分辨率的圖片,即為了兼容或者說讓應用程序在不同分辨率下的機器上更好的呈現,一般一張圖片要弄三張不同分辨率的放在這三個文件夾下,如:應用程序的圖標或其中所用到的圖片,應用程序在啟動時會根據當前機器(客戶端)的分辨率采用合適的一張圖片;放在drawable文件夾下的圖片會自動在R.java文件的drawable類生成一個相應的變量,代碼如下:
public static final class drawable {
public static final int cat=0x7f020000;
public static final int ic_launcher=0x7f020001;
}
layout文件夾下放的是內容視圖文件,可以理解為跟.net中.aspx文件類似——界面布局文件,那就會有朋友問了:每個內容視圖文件的代碼控制類是如何與之關聯的?這個需要在每個Activity類的onCreate方法中 通過 setContentView(R.layout.formactivity); 此行代碼設置。其中main.xml是默認的內容視圖文件!
values文件夾下放的是當前應用程序中使用到的字符串——以鍵值對的形式存放,如:應用程序的名稱、按鈕等提示文本,這樣做的好處是:將文本字符串與代碼分離,方便做國際化,如你現在做的應用程序針對的是中國用戶,當你想增加個日本或英文版本時,你只需要在values文件夾下增加相應國際化的strings.xml文件即可!具體做法會在以后的博客中講解。
src文件夾下當前應用程序項目名稱文件夾下 放的一般是Activity類(可以理解為界面窗體后置代碼類)和其它的類文件。
AndroidManifest.xml 此文件類似與.net中的web.config文件——應用程序配置文件,如配置:應用程序名稱和icon、最低支持的SDK版本、用戶權限、第三方類庫等,在這篇文章里只具體說下常用和基礎的配置屬性,文件內容如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.FirstAVd"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".FirstAVdActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".FormActivity"
android:label="@string/formactivity_name" >
</activity>
</application>
</manifest>
package="android.FirstAVd" 當前應用程序的包名
android:versionCode="1" 當前應用程序的版本號
android:versionName="1.0" 當前應用程序的版本名稱
<application
android:icon="@drawable/ic_launcher" 當前應用程序的圖標
android:label="@string/app_name" > 當前應用程序的名稱
<activity
android:name=".FirstAVdActivity" 界面窗體的類名
android:label="@string/app_name" > 界面窗體的名稱
如上有兩個activity的聲明(注冊),但只有內部有<intent-filter>的activity才是應用程序默認啟動的窗體界面,而且每個activity必須要在此文件中聲明(注冊),否則將會報錯!
1.2 Button TextView控件的基本用法
首先在內容視圖xml文件中添加控件,再在對應的activity類中根據控件id獲得控件對象,代碼如下:
<TextView
android:id="@+id/tvShow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/author" />
<Button
android:id="@+id/btnchangecontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>

public class FirstAVdActivity extends Activity {
private TextView tvShow;
private Button btnSendSms;
private Button btnAction;
private Button btnchangecontent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* TextView tv2 = new TextView(this);
tv2.setText("Nice see you!"+new Date().getTime());
setContentView(tv2);
*/
//設置當前Activity的內容視圖(文件)
setContentView(R.layout.main);
tvShow=(TextView)this.findViewById(R.id.tvShow);
btnAction=(Button)this.findViewById(R.id.btnforward);
btnAction.setText("測試按鈕");
btnAction.setTextSize(23);
btnAction.setTextColor(Color.GREEN);
btnAction.setBackgroundColor(Color.GRAY);
btnAction.setOnClickListener(new BtnActionOnClickListener());
1.3 Activity之間跳轉簡單傳值,Intent的簡單使用
如以下代碼實現的是從FirstAVdActivity跳轉到FormActivity,並在FormActivity中獲得傳遞的值的實現:
FirstAVdActivity中的跳轉按鈕事件——
class BtnActionOnClickListener implements OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//創建一個Intent請求對象
Intent intent=new Intent();
//將要傳遞的值以鍵值對的形式存放在intent對象中
intent.putExtra("user_name", "tom_marker");
//設置請求的源(FirstAVdActivity)和目標(FormActivity)
intent.setClass(FirstAVdActivity.this, FormActivity.class);
//執行請求
FirstAVdActivity.this.startActivity(intent);
}
}
FormActivity中獲得傳遞值——
public class FormActivity extends Activity {
private TextView tvShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.formactivity);
Intent intent=this.getIntent();
tvShow=(TextView)this.findViewById(R.id.tvShow);
//tvShow.setText(new Date().getMinutes());
tvShow.setText(R.string.welText+intent.getStringExtra("user_name"));
} catch (Exception e) {
tvShow.setText("Error: "+e.getMessage());
}
}
}
1.4 控件事件的綁定
事件的綁定有如下兩種方式,貼出代碼,一看便知
方式一
btnchangecontent.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
//Toast提示控件
Toast.makeText(FirstAVdActivity.this,
"TextView里的文字發生了改變,你注意到了嗎?",
Toast.LENGTH_LONG).show();
//將tvShow的文字發生改變
tvShow.setText("Android Button控件綁定單擊事件"+"\n"+new Date().getTime());
}
});
方式二
btnSendSms.setOnClickListener(new BtnSendSmsOnClickListener());
class BtnSendSmsOnClickListener implements OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//創建一個Intent請求對象
Uri uri=Uri.parse("smsto://13227517186");
Intent intent=new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra("sms_body", "This sms test content!");
FirstAVdActivity.this.startActivity(intent);
}
}
好了,時間有限,就寫到這吧,可能有些倉促和沒有說到的地方,希望能對你有所幫助,也希望大家多交流、提意見!
以上所講代碼示例下載 FirstAVd.rar