Android Studio 單刷《第一行代碼》系列 03 —— Activity 基礎

前情提要(Previously)

本系列將使用 Android Studio 將《第一行代碼》(書中講解案例使用Eclipse)刷一遍,旨在爲想入坑 Android 開發,並選擇 Android Studio 做爲開發 IDE 的同窗開路。
PS:其實我就是現學現賣,但願我能堅持刷完。html

在 Day 一、Day 2,咱們建立了第一個App project,並分析了項目結構、運行原理,實踐了 LogCat 的使用。java

系列目錄在此:android

摘要(Abstract)

Activity 是 一個 App 的臉面,而這又是一個看臉的世界,那就讓咱們從臉開始吧。這篇都是基礎的羅列,沒有什麼值得注意的地方。app

Activity 的基本用法

跟着書走,先建立一個 ActivityTest 的項目,注意在選擇 Activity 的時候,選擇 Add No Activity。以下圖ide

no activity

建立活動

在 app/src/mani/java/com.xxx.ActivityTest 目錄上點擊右鍵 → New,這裏有兩種選擇:佈局

  • 選擇 Java Class,新建一個名爲 FirstActivity 的類,並 extends Activity,重寫 onCreate() 方法。代碼能夠參考以前的 HelloWorld。
  • 選擇 Activity,系統會生成一個 Activity,以及相關的佈局文件 Layout,並在 AndroidManifest.xml 中註冊。

以下圖this

new activity

建立和加載佈局

新建立好的項目是沒有 Layout 目錄的,在 app/src/main/res 目錄上點右鍵 → New → Android resource directory,在彈出的對話框中將 Resource type 選爲 layout。code

而後在 res/Layout 目錄上點右鍵 → New → Layout resource file,在彈出的對話框中填上名字,Finish,這樣就建立好了。xml

打開文件,能夠向裏面添加一個 Button 控件試試看。htm

註冊

Activity 必須在 AndroidManifest.xml 文件中註冊纔可使用,代碼以下:

<activity
        android:name=".FirstActivity"
        android:label="FirstActivity" >
    </activity>

若是想讓其在 App 運行時打開,還須要添加 intent-filter,代碼以下:

<intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

隱藏標題欄

在 Activity 的 onCreate()方法中添加 requestWindowFeature(Window.FEATURE_NO_TITLE);

PS:在這裏我遇到個坑,我建立的繼承 Activity 的 活動默認就不顯示標題欄,並且我也不知道怎麼能讓標題欄顯示出來。

消息提示 Toast

Toast 是 Android 提供的一種很是好的提醒方式,在程序中可使用她將一些短小的信息通知給用戶,這些信息會在一段時間後自動消失。

例子是這樣的,在 onCreate() 方法中,給 Button 綁定一個點擊事件,再點擊 Button 時顯示一條信息,代碼以下:

Button button1 = (Button) findViewById(R.id.button_1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(FirstActivity.this, "you clicked button 1", Toast.LENGTH_SHORT).show();
        }
    });

PS:我多麼但願 HTML 中也有這樣的元素啊。

我真心以爲 Menu 沒什麼好講的。

Activity 跳轉

建立一個名爲 SecondActivity 的 Activity(好繞口)。

例子是這樣的,在 FirstActivity 中點擊 Button 後跳轉到 SecondActivity。代碼以下:

button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
            startActivity(intent);
        }
    });

傳遞數據

例子是這樣的,在 FirstActivity 中點擊 Button 後跳轉到 SecondActivity,並將一個字符串傳過去。
1.FirstActivity 中發送代碼以下:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
    String data = "hello second";
    intent.putExtra("extra_data", data);
    startActivity(intent);

2.SecondActivity中,在 onCreate() 方法中,接收代碼以下:

Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");

返回數據

須要用 startActivityForResult() 來代替 startActivity() 方法。

例子是這樣的,在 FirstActivity 中點擊 Button 後跳轉到 SecondActivity,而後點擊返回鍵返回到 FirstActivity,並返回一個字符串。

1.FirstActivity 中發送代碼以下:

startActivityForResult(intent, 1);

其中的第二個參數 requestCode,用於在以後的回調方法中判斷數據的來源。要保證在當前 Activity 中的惟一性。

2.SecondActivity中,重寫點擊返回鍵時觸發的 onBackPressed() 方法,代碼以下:

@Override
public void onBackPressed(){
    Intent intent = new Intent();
    intent.putExtra("data_return","hello first");
    setResult(RESULT_OK, intent);
    finish();
}

3.當從 SecondActivity 返回時,會回調上一個活動的 onActivityResult() 方法,因此須要重寫 FirstActivity 的 onActivityResult() 方法來獲取返回的數據,代碼以下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
                Log.d("FirstActivity", returnedData);
            }
            break;
        default:
    }
}

其它(Miscellaneous)

儘管我試圖在本文中儘可能完整的進行描述,但受限於篇幅和個人我的水平,本文不免有所遺漏,歡迎在評論中指出。
若是您以爲閱讀本文對您有幫助,請點一下「推薦」按鈕,您的「推薦」將是我最大的寫做動力!

關於做者(About Me)

addict
原文連接:http://www.cnblogs.com/DebugLife/p/4349428.html

本文謝絕轉載,如需轉載需徵得做者本人贊成,謝謝。

相關文章
相關標籤/搜索