Android學習筆記(1)-永遠不變的Hello World

來源:互聯網
上載者:User
Google的Android SDK發布也有一段時間了,一直想研究一下卻苦於找不到時間。利用這個周未,開始強迫自己再次進入學習狀態,原因很簡單:我看好開放的gPhone。
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>

這個檔案很好讀,一個<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一樣,很方便的。

好了,今天是第一天,先學到這裡吧,下回我覺得我有必要仔細研究一個Activity的API了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.