Activity初窺門徑


本節引言:

上一節中我們對Activity一些基本的概念進行了了解,什麼是Activity,Activity的生命週期,如何去啟動一個Activity等,本節我們繼續來學習Activity,前面也講了一個App通常都是又多個Activity構成的,這就涉及到了多個Activity間資料傳遞的問題了,那麼本節繼續學習Activity的使用!另外關於傳遞集合,對象,數組,Bitmap的我們會在Intent那裡進行講解,這裡只介紹如何傳遞基本資料!


Activity間的資料傳遞:

1.png

#程式碼範例:

效果圖:

2.gif

#程式碼下載:ActivityTest1.zip


2 .多個Activity間的互動(後一個傳回給前一個)

3.png

#程式碼範例:

效果圖:

4.gif

#程式碼下載:ActivityTest2.zip


3.知道目前是哪個Activity

5.png


4.隨時關閉所有Activity

6.png

有時我們可能會打開了很多Activity,突然來個這樣的需求,在某個頁面可以關掉 所有的Activity並退出程序!好吧,下面提供一個關閉所有Activity的方法, 就是用一個list集合來儲存所有Activity!

具體程式碼如下:

public class ActivityCollector {  
    public static LinkedList<Activity> activities = new  
    {  
        activities.add (activity);  
    }  
    public static void removeActivity(Activity activity)  
      }  
    public static void finishAll()  
    {
        for(Activity activity:activities)  
        {  
            if(!activity.isFinishing())  
            {  
                activity.finish();  
            }  
        }  
}  
}


5.完全退出App的方法

上面說的是關閉所有Activity的,但是有些時候我們可能想殺死整個App,連後台任務都殺死 殺得一乾二淨的話,可以使用搭配著下述程式碼使用:

實作程式碼:

/** 

 * 退出應用程式 
 */  

public void AppExit(Context context) {  
    try {  
        ActivityCollector.fin5 text  
                .getSystemService(Context.ACTIVITY_SERVICE);  
    . (context.getPackageName());  
        System.exit(0);  
    } catch (中針對

6.雙擊退出程式的兩種方法:

1)定義一個變量,來識別是否退出

// 定義一個變量,來識別是否退出
private static boolean isExit = false;
Handler mHandler = new Handler() {
# @Override
# public void handleMessage(Message ms#m). # isExit = false;
}
};

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK. isExit) {
isExit = true;
Toast.makeText(getApplicationContext(), "再按一次退出程式",
Toast.LENGTH_SHORT).show();
// 利用handler延遲發送更改狀態資訊
mHandler.sendEmptyMessageDelayed(0, 2000);
} else {
exit(this);
# }
return false;
}
#return er.## }
return false;
(keyCode, event);}

2)儲存點選時間:

//儲存點擊的時間
private long exitTime = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
# if ((System.currentTimeMillis() -v); makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
}  {
 it();
                  }
return false;
}
# return ____________er.onKeyDown(keyCode event);## }

super.onKeyDown(keyCode

7.為Activity設定過場動畫

所謂的過場動畫就是切換到另外的Activity時加上一些切換動畫,比如淡入淡出,放大縮小,左右互推等! 當然,我們在這裡不詳細講解動畫,後面有專門的章節來講解這個,這裡只教大家如何去載入動畫,另外 提供了一些比較常用的過渡動畫,只要將相關動畫檔案加入res/anim目錄下,然後下述方法二選一 就可以實現Activity的切換動畫了!

1)方法一:

7.png

2)方法二:

透過style進行配置,這個是全域的哦,就是所有的Activity都會載入這個動畫!

實作程式碼如下:

##①在style.xml中自訂style:

<! -- 預設Activity跳轉動畫 -->
<style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity">
    <item name=" android:activityOpenEnterAnimation">@anim/default_anim_in</item>
    <item name="android:activityOpenExitAnimation"> /anim_ltstay<name; erAnimation" >@anim/anim_stay</item>
    <item name="android:activityCloseExitAnimation">@anim/default_anim_out&#lt;/item>
<@anim/default_anim_out&#lt;/item>
<@anim/default_anim_out&#;
解釋:

4個item分別代表:

Activity A跳到Activity B時Activity B進入動畫;

Activity A跳到Activity B時Activity A退出動畫;
  • Activity B返回Activity A時Activity A的進入動畫
  • Activity B返回Activity A時ActivityB的退出動畫
  • #②接著修改下AppTheme:

<style name="AppTheme" mce_bogus="1" parent="@android:style/Theme.Light"> ;        <item name="android:windowAnimationStyle">@style/default_animation</item>

    style>

③最後在appliction設定下:

<application
   android:icon="@drawable/logo"
   android:label="@ string/app_name"
   android:theme="@style/AppTheme" >

好的,動畫特效就這樣duang一聲設定好了~

3)其他

好的,除了上面兩種方法以外,還可以使用TransitionManager來實現,但是需求版本是API 19以上的, 另外還有一種addOnPreDrawListener的轉換動畫,這個用起來還是有點麻煩的,可能不是適合初學者 這裡也不講,最後提供下一些常用的動畫效果打包,選擇需要的特效加入工程即可! Activity常用過渡動畫.zip


8.Bundle傳遞資料的限制

在使用Bundle傳遞資料時,要注意,Bundle的大小是有限制的< 0.5MB,如果大於這個值 是會報TransactionTooLargeException異常的! ! !


9.使用命令列查看目前所有Activity的命令:

使用下述命令即可,前提是你為SDK配置了環境變數: adb shell dumpsys activity


10.設定Activity全螢幕的方法:

1)程式碼隱藏ActionBar

#在Activity的onCreate方法中呼叫getActionBar.hide();即可

2)透過requestWindowFeature設定

requestWindowFeature(Window.FEATURE_NO_TITLE); 程式碼需要在setContentView ()之前調用,不然會報錯! ! !

註:把 requestWindowFeature(Window.FEATURE_NO_TITLE);放在super.onCreate(savedInstanceState);前面就可以隱藏ActionBar而不報錯。

3)透過AndroidManifest.xml的theme

在需要全螢幕的Activity的標籤內設定theme = @android:style/Theme.NoTitleBar.FullScreen


#11.onWindowFocusChanged方法妙用:

我們先來看下官方對這個方法的介紹:

就是,當Activity得到或失去焦點的時候,就會回調該方法! 如果我們想監控Activity是否加載完畢,就可以用到這個方法了~ 想深入了解的可移步到這篇文章:onWindowFocusChanged觸發簡介


#12.定義對話框風格的Activity

在某些情況下,我們可能需要將Activity設定成對話框風格的,Activity通常是佔全螢幕的, 而Dialog則是佔據部分螢幕的!實作起來也很簡單!

直接設定下Activity的theme:

android:theme="@android:style/Theme.Dialog"

這樣就可以了,當然你可以再設定下標題,小圖示!


//設定左上角小圖示
requestWindowFeature(Window.FEATURE_LEFT_ICON);
setContentView(R.layout.main);
getWindow().setFeatureDrawableResource( Window.FEATURE_LEFT_ICON, android.R.drawable.ic_lion_icon);
//設定文字:
setTitle(R.string.actdialog_title);  //XML程式碼中設定:android:label="@string/activity_dialog"

本節小結:

好的,本節我們又學習了一下Activity在實際開發中的一些常見問題,相信在實際開發中會幫到大家的! 下節我們來學習Activty的堆疊的概念,以及四種載入模式!敬請期待~謝謝~