《Android第一行代碼》first reading 二

活動(activity)是最容易吸引用戶的地方,它是一種可以包含用戶界面的組件,主要用于和用戶進行交互。

在AndroidManifest文件中注冊

所有的活動都需要在AndroidManifest.xml中注冊。不過Android Studio會自動進行注冊

<application    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".FirstActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />     
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
   </application>
在<application>標簽中:

android:icon設置APP的圖標,安裝在手機上的APP圖標就是這個。
android:label設置APP的標題,安裝在手機上的APP標題就是這個。
通過<activity>標簽來進行活動注冊。

Toast提示

Toast.makeText(FirstActivity.this,"這是按鈕",Toast.LENGTH_SHORT).show();
Toast通過靜態方法makeText()創建,讓后調用show()將其顯示出來。
makeText()方法需要3個參數:

  • Context
  • Toast所需文本
  • Toast所需時長 有兩個內置常量Toast.LENGTH_SHORT和Toast.LENGTH_LONG

Menu菜單

  1. res中新建一個menu文件夾,在menu中建立新建布局文件。
menu.png
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/add_item"
        android:title="Add"/>
    <item android:id="@+id/remove_item"
        android:title="Remove"/>
    <item android:id="@+id/finish_item"
        android:title="Finish"/>
</menu>

<item>標簽就是用來創建具體的某一項菜單項。

  • 在Activity中重寫onCreateOptionsMenu()方法【快捷鍵Ctrl+o】
@Overridepublic boolean onCreateOptionsMenu(Menu menu)
{
//通過getMenulnflater()方法能夠得到MenuInflater對象,再調用它的inflate()方法就可以給當前活動創建菜單了。
//inflate方法兩個參數,第一個用于指定我們通過哪一個資源文件,第二個用于指定我們的菜單項添加到哪一個menu對象中。
    getMenuInflater().inflate(R.menu.main,menu);
    return true;
}
  • 繼續重寫onOptionsItemSelected()方法,為菜單添加響應事件
@Overridepublic boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.add_item:
            Toast.makeText(FirstActivity.this,"這是add按鈕",Toast.LENGTH_SHORT).show();
            break;
        case R.id.remove_item:
            Toast.makeText(FirstActivity.this,"這是remove按鈕",Toast.LENGTH_SHORT).show();
            break;
        case R.id.finish_item:
            Toast.makeText(FirstActivity.this,"這是finish按鈕",Toast.LENGTH_SHORT).show();
            finish();//關閉當前活動
            break;
    }
    return true;
}

Intent

Intent是Android程序中各個組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。

1. 顯式Intent

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);

2. 隱式Intent

在AndroidManifest.xml中的<activity>標簽下配置<intent-filter>的內容,其中可以指定<action>,<category>,<data>三個標簽:

<activity android:name=".ThirdActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity>

當<action><category>中的內容同時能夠匹配上Intent中指定的action和actegory時,這個活動才能響應該Intent。<data>標簽用于更精確地指定當前活動能夠響應什么類型的數據。

<data>標簽配置
  • android:scheme 用于指定數據的協議部分
  • android:host 用于指定數據的主機名部分
  • android:port 用與指定數據的端口部分
  • android:path 用于指定主機名和端口之后的部分
  • android:mimeType 用于指定可以處理的數據類型,允許使用通配符的方式進行指定。

3. Intent數據傳遞

- 向下一個活動傳遞數據

通過putExtra()方法傳遞一個字符串

Intent intent = new Intent();
intent.putExtra("data","Hello SecondActivity");
startActivity(intent);

通過getIntent()方法獲取到啟動activity的Intent,讓后通過getStringExtra取得字符串。

Intent intent = getIntent();
String data = intent.getStringExtra("data");
Log.d("SecondActivity",data);
- 返回數據給上一個活動

可通過startActivityForResult()方法實現。該方法期望活動結束后返回一個j結果給上一個活動。其接受兩個參數:Intent和請求碼。請求碼唯一。

//FirstActivity中
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
//SecondActivity
button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentClick = new Intent();
                intentClick.putExtra("data_return","Hello FirstActivity");
//setResult()方法中,第一個參數用于向上一個活動返回處理結果,第二個參數則是帶有數據的Intent。
                setResult(RESULT_OK,intentClick);
                finish();
            }
        }
);
//FirstActivity中重寫onActivityResult()方法
//該方法帶有三個參數:
//requestCode 請求碼、resultCode 返回數據時傳入的結果集、data 帶參的Intent
@Overrideprotected 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:
    }
}
//還可以在SecondActivity中重寫onBackPressed()方法實現點擊Back鍵返回數據
@Overridepublic void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("data_return","Hello FirstActivity");
    setResult(RESULT_OK,intent);
    finish();
}

當然上面的內容只是一部分而已,想更深入的了解還得在繼續研究。同樣我還找到一些其他的資料,比如:
intent Filter
其他人的閱讀筆記
Android Developers
這里僅僅是我記錄的部分筆記,以備回顧記憶
如有侵權請聯系我,我將進行修改和刪除

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Day1: 在代碼中通過R.string.hello_world可以獲得該字符串的引用; 在XML中通過@stri...
    冰凝雪國閱讀 1,451評論 0 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,432評論 25 708
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,536評論 0 17
  • 作為Android的四大組件之一,活動最先走進我們的視野,其重要性不言而喻,今天就抽出時間來專門對Android活...
    loser先生閱讀 915評論 0 0
  • 武漢最近天熱得不行,頂著太陽曬的那種,就是打個雞蛋在地上,可以馬上吃上荷包蛋的那種。太熱了!家里四臺空調,四臺電風...
    麥子飛呀飛閱讀 231評論 0 0