1. 程式人生 > >Android學習筆記(建立Menu,Intent的使用)

Android學習筆記(建立Menu,Intent的使用)

//Test1.java
package com.activitytest.testactivity2;

import android.app.Activity;
import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

/**
 * Intent用於連線Activity,以及Activity之間傳遞資料(從活動之間切換顯示資訊)
 * 還可用於傳送廣播、服務等場景
 */

public class Test1 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);  //初始化元件
        requestWindowFeature(Window.FEATURE_NO_TITLE); //隱藏清單檔案中定義的標題欄label,要在顯示檢視之前使用
        setContentView(R.layout.first_layout);   //在介面中載入佈局檔案
        Button button1 = (Button)findViewById(R.id.button_1); //id尋找View
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v)//點選按鈕就會執行此方法;
            {
                //Toast類用於將一些短小的資訊通知給客戶,一段時間後會消失,並且不會佔用任何的螢幕空間。
                //makeText()為靜態方法,第一個引數是Context抽象類,它是Activity等的父類,而Test1類直接繼承
                //了Activity類,所以直接使用子類的物件向上轉型傳入引數,第三個引數是Toast顯示的時長
                //Toast.makeText(Test1.this,"You clicked Button 1", Toast.LENGTH_SHORT).show();
                 //finish(); //銷燬活動
                //下面使用Intent,以Test1活動作為上下文,通過按鈕Button 1啟動SecondActivity
                //以下是顯式Intent的使用
               // Intent intent=new Intent(Test1.this,SecondActivity.class); //Intent(Context packageContext, Class<?> cls) ,
                //第一個引數表示以Test1活動作為上下文,在Tes1活動的基礎上(點選Button 1後)開啟SecondAcivity活動
                //startActivity(intent);//啟動Intent
                //以下是隱式Intent的使用:
                //先在清單檔案中intent-filter中新增action和category標籤定義android:name的內容,然後在java檔案中
                //使用intent的有參建構函式傳入action的內容,使用Intent類的addCategory()方法傳入category的內容可以新增category
                //但是需要在清單檔案中加入此category
                Intent intent = new Intent("com.activitytest.testactivity2.ACTION_START");
                intent.addCategory("com.activitytest.testactivity2.MY_CATEGORY");
                startActivity(intent);
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)  //每一個Activity只有唯一一個Menu,建立選單時會觸發函式
    {//第一次初始化選單例項時呼叫inflate方法
        getMenuInflater().inflate(R.menu.main,menu);//引數:建立選單的檔案,選單Menu的物件
        return true;  //返回true表示允許建立的選單能夠顯示出來,
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) //讓選單的item選項響應事件,點選item就會自動執行此方法,所以要進行過載
    {
        switch(item.getItemId()) //每個item都有自己的id
        {
            case R.id.add_item:
                Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show(); //Menuitem類的item物件
                break;
            case R.id.remove_item:
                Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true; //true表示該方法執行完畢後,點選事件不會再向下一個事件處理方法傳遞了
    }
}

menu資料夾下的main.xml檔案:

<!--res/menu/main.xml-->
<?xml version="1.0" encoding="utf-8"?>
<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" />
 </menu>
//SecondActivity.java
package com.activitytest.testactivity2;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

/**
 * 先在second_layout.xml中定義一個按鈕,然後在java檔案中呼叫setConteneView方法實現引入此檔案作為引數
 * 最後要在Manifest.xml中對此活動檔案進行註冊
 */

public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);  //隱藏標題欄
        setContentView(R.layout.second_layout);
    }
}
<!--AndroidManifest.xml清單註冊檔案-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.activitytest.testactivity2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".Test1"
            android:label="This is Test1 activity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.activitytest.testactivity2.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.activitytest.testactivity2.MY_CATEGORY"/>
            </intent-filter>
        </activity>
    </application>

</manifest>
<!--layout/first_layout.xml-->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button_1"
        android:text="Button 1"/>
</LinearLayout>

<!--layout/second_layout.xml-->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
       android:id="@+id/button_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 2" />
</LinearLayout>