很久就在開始學習androidl ,現在利用點點時間來總結一下進入android的世界!
SDK的下載與安裝並不複雜,網上也有不少,我就不再重複了吧。
今天主要討論的,還是永遠不變的話題:Hello World.
1.最簡單的HelloWorld
安裝了SDK後,直接生成一個Android Project,一句代碼不用寫,就能跑出一個最簡單的HelloWorld例程。我們看一下它的代碼:
public void onCreate(Bundle icicle)
{ super.onCreate(icicle);
setTheme(android.R.style.Theme_Dark);
setContentView(R.layout.main);
}
看上去實在很簡單,只有兩句話而已。關鍵在這個R.layout.main上,憑直覺,這應該是定義的資源。的確,在R.java中只是定義了一個static int 而已,真正的資源描述在res/layout/main.xml文件裏(注意:這裏的R.java不要手工編輯,每次build project時它都會根據res下的資源描述被自動修改)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView id="@+id/txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World"
/>
</LinearLayout>
這個文件很好讀,一個描述了這是一個線性排列的佈局,android:orientation=vertical表示所有組件將縱向排布。而經典的Hello World是用一個TextView來展示的。
由此,我們知道,Android的程序從一個Activity派生出來,並且從它的onCreate開始啓動;Android裏要顯示的組件用XML文件描述而不用在代碼中硬編碼(這是一個好的習慣,我們應該從一開始就堅持下去);
2.讓Button來說Hello World
上面的例子是ADT自動生成的代碼,似乎與我們一點關係也沒有。那我們來改一下代碼,因爲在windows平臺上的Helloworld經常是由一個按鈕觸發的,所以,我們想第二個Helloworld應該是這樣的:加一個按鈕和文本輸入框,單擊按鈕後在原來的TextView後面加上輸入框中輸入的文字。
第一步是,增加一個Button和一個EditText,與TextView一樣,它們也在main.xml裏描述一下:
<EditText id="@+id/edt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
<Button id="@+id/go"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/go">
<requestFocus />
</Button>
這裏有兩個地方要注意:id=@+id/go,這表示需要一個唯一的UID來作爲Button的ID,它的引用名是go。還有一個是android:text=@string/go表示這個按鈕的文本不是直接寫有main.xml裏了,而是來源於另一個資源描述文件strings.xml裏,本例中的strings.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">helloTwo</string>
<string name="tit_dialog">提示</string>
<string name="msg_dialog">你好,中國</string>
<string name="ok_dialog">確定</string>
<string name="go">瀏覽</string>
</resources>
然後,在代碼裏(onCreate函數中)我們加上以下代碼(簡單起見,用了嵌套類):
Button btn = (Button)findViewById(R.id.go);
btn.setOnClickListener(new View.OnClickListener()
{ public void onClick(View v)
{ EditText edt=(EditText)helloTwo.this.findViewById(R.id.edt);
TextView txt= (TextView)helloTwo.this.findViewById(R.id.txt);
txt.setText(getString(R.string.msg_dialog)+edt.getText());
}
});
爲銨鈕增加一個onClick事件處理器,在點擊事件中,設置txt的文本爲R.string.msg_dialgo+edt.getText()。
這裏的關鍵是兩個函數的使用: findViewById(R.id.go)可以根據資源的名稱加載View類型的資源,同樣用函數getString(R.string.msg_dialog)可以加載字符串資源。
編譯,run一下看看效果。
3. 再讓菜單Say Hello
從API文檔中我們看到Activity中有兩個函數:onCreateOptionsMenu和onOptionsItemSelected,顯示,這個OptionsMenu就是所謂的上下文菜單(在GPhone的模擬器上,有個鍵專用於彈出這個菜單)。下面我們就爲這個HelloWorld例子加上一個菜單,並且讓它可以Say hello。
這次,我們不涉及到資源的描述文件了,而是直接使用這兩個函數來實現,其實代碼也很簡單,所以,我們再增加一個退出應用的功能(否則每次都是按取消鍵退出應用顯示太不專業了)。
代碼如下:
public boolean onCreateOptionsMenu(Menu menu)
{ super.onCreateOptionsMenu(menu);
menu.add(0,1,"say hello");
menu.add(0,2,"exit");
return true;
}
public boolean onOptionsItemSelected(Item item)
{ super.onOptionsItemSelected(item);
int id = item.getId();
switch(id)
{ case 1:
AlertDialog.show(this,getString(R.string.app_name),
getString(R.string.msg_dialog), getString(R.string.ok_dialog), true);
break;
case 2:
finish();
break;
}
在CreateOptionsMenu時,我們簡單地增加兩個菜單項,menu.add(組ID,項ID,顯示文本),(注意:這裏我直接將文字寫在代碼裏,這並不提倡)。然後,在OptionsItemSelected事件中,我們根據選中的菜單項做相應處理,如果選中1,則彈出一個對話框顯示資源文件中的“你好,中國”,如果選中2則退出應用。
AlertDialog.show是一個靜態方法,類似於我們在WIN平臺上經常使用的MessageBox一樣,很方便的。