永遠不變的Hello World

很久就在開始學習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來作爲ButtonID,它的引用名是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中有兩個函數:onCreateOptionsMenuonOptionsItemSelected,顯示,這個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一樣,很方便的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章