01_創建一個新的activity&activity配置清單文件


今天開始學四大組件。今天是學Activity,然后是廣播接收者,然后是服務,然后是內容提供者。四大組件,咱們一天一個。Activity就是跟用戶交互的界面,大部分的應用都不會只有這么一個界面。創建多個Activity,在不同的頁面之間進行跳轉並且在不同的頁面之間進行數據的傳遞。

創建一個新的Activity,想辦法把它給打開。打開一個Activity就涉及到一個隱式意圖和一個顯式意圖。intent,第二天的時候打電話,電話撥號器就用到了這個東西。

Activity的生命周期。講Servlet的時候提到過生命周期的概念。說一下Activity的生命周期和它的生命周期方法究竟有什么用。

最后說一下Activity的任務棧。

Activity是四大組件里面最重要的一個組件。所以今天的內容需要全部掌握,都是非常重要的重點。必須全部掌握。


創建一個新的Activity。其實之前寫代碼的時候Activity實際上都不需要咱們創建。因為咱們默認勾上了幫咱們創建一個空的MainActivity。現在得自己創建一個新的Activity。

package com.itheima.createnewactivity;

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

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加載界面 解析xml文件  把xml文件中聲明的控件  創建出對應的java對象
        setContentView(R.layout.activity_main);
        //new M
    }
}
package com.itheima.createnewactivity;

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

public class SecondActivity extends Activity {
   //重寫onCreate()方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);//第二個Activity對應的Java類已經寫好了.
        //findViewById(id)
        //setOnClickListener
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#ff0000"
        
        android:text="我是第二個Activity" />

</RelativeLayout>

為什么要重寫這個onCreate()方法?onCreate()什么時候執行這個還記得嗎?第一天在講電話撥號器的時候就提過這個。當我的Activity一創建的時候,這個對象創建起來之后系統就會幫助咱們調用onCreate()方法。所以在onCreate()方法中要做的就是跟初始化相關的操作。比如setContentView把界面初始化過來。比如findViewById(id)找到我需要操作的目標。比如說我給按鈕設置點擊事件,setOnClickListener。這些東西都要放在onCreate()里面。


不在AndroidManifest.xml里面配置一下是無法顯示SecondActivity界面的。MainActivity在清單文件里面有一個activity節點。每創建出一個新的Activity如果你想用的話就必須在清單文件里面聲明對應的Activity。為什么必須聲明?需要注意的是所有的四大組件都不能自己去創建這個對象。

MainActivity也有無參的構造而且是public也可以去調,但是咱不能自己調。所有的四大組件的對象都需要系統幫助咱們創建。系統創建怎么創建?就是通過反射的方式。所以你必須在清單文件里面聲明對應的節點。

SecondActivity第二個界面也已經聲明完了。

問題出在清單文件里面activity節點的意圖過濾器的那段代碼。

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

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

意圖過濾器如果你給它指定了一個action,這個叫MAIN.category有一個東西叫LAUNCHER.LAUNCHER是啟動/發射.所以LAUNCHER這個東西是作為了一個啟動器。如果你的一個Activity聲明了這么一個intent-filter意圖過濾器,它里面action是MAIN,category是LAUNCHER,那么這一個Activity就會作為應用的入口並且在桌面上放了一個圖標。


為什么SecondActivty也是寫MAIN和LAUNCHER,但是啟動的是第一個MainActivity.因為MainActivity在前面,你一個應用那肯定只有一個入口。它這個PULL解析是一行一行來的,解析到<activity默認誰在前面誰就是啟動器。但是呢桌面上這個圖標確實給SecondActivity放了一個。

當前就比較詭異了,當前我這一個應用但是桌面上有兩個圖標。但是呢點擊去的界面還不一樣。正常的情況下所有的應用只有這么一個圖標。但是有的設備上你即使這么寫了它也不會幫你創建兩個圖標,它會自動地把第二個Activity過濾掉,默認只是第一個Activity起作用。但是只要有的設備可能會出現這個情況,那咱們就不能夠這么做。

所以說每一個應用只能有一個Activity下配置這么一個intent-filter,就是action是MAIN,category是LAUNCHER.

應用的名字是application節點的android:label顯示的.

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"

如果application節點的android:label和下面的activity節點的android:label標簽是一樣的那就無話可說了。但是可以給activity節點指定一個特殊的android:label標簽.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.createnewactivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itheima.createnewactivity.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.itheima.createnewactivity.SecondActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.createnewactivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itheima.createnewactivity.MainActivity"
            android:label="第一個activity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.itheima.createnewactivity.SecondActivity"
            android:label="第二個activity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

你作為啟動界面的Activity它里面所配置的android:label,如果你這個沒有配置的話它默認會找application.如果你配置了的話一定是用Activity的android:label.application的label是在應用管理器里顯示的.

application的label在這里顯示。

android:icon="@drawable/ic_launcher"

icon就是給它指定一個圖標。如果在activity節點下你聲明了android:icon和android:label,那么默認他使用的就是activity下的icon,如果你沒聲明的話他會去找application節點下的icon和label。


 一個應用兩個圖標看起來是很詭異的。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.createnewactivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itheima.createnewactivity.MainActivity"
            android:icon="@drawable/header1"
            android:label="第一個activity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.itheima.createnewactivity.SecondActivity"
            android:icon="@drawable/header2"
            android:label="第二個activity" >
            <!--  
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            -->
        </activity>
    </application>

</manifest>

 

 

在activity和application節點里面咱們都可以去聲明一個icon和一個label,如果它們倆都有默認使用activity里面,application這個最終就會展示到我的應用管理器,在那個位置上會看到application節點下聲明的對應的內容。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM