国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Manuel de développement Android / Activity初窺門徑

Activity初窺門徑

本節(jié)引言:

上一節(jié)中我們對(duì)Activity一些基本的概念進(jìn)行了了解,什么是Activity,Activity的生命周期,如何去啟動(dòng)一個(gè)Activity等,本節(jié)我們繼續(xù)來學(xué)習(xí)Activity,前面也講了一個(gè)App一般都是又多個(gè)Activity構(gòu)成的,這就涉及到了多個(gè)Activity間數(shù)據(jù)傳遞的問題了,那么本節(jié)繼續(xù)學(xué)習(xí)Activity的使用!另外關(guān)于傳遞集合,對(duì)象,數(shù)組,Bitmap的我們會(huì)在Intent那里進(jìn)行講解,這里只介紹如何傳遞基本數(shù)據(jù)!


Activity間的數(shù)據(jù)傳遞:

1.png

代碼示例:

效果圖:

2.gif

代碼下載:ActivityTest1.zip


2.多個(gè)Activity間的交互(后一個(gè)傳回給前一個(gè))

3.png

代碼示例:

效果圖:

4.gif

代碼下載:ActivityTest2.zip


3.知曉當(dāng)前是哪個(gè)Activity

5.png


4.隨時(shí)關(guān)閉所有Activity

6.png

有時(shí)我們可能會(huì)打開了很多個(gè)Activity,突然來個(gè)這樣的需求,在某個(gè)頁面可以關(guān)掉 所有的Activity并退出程序!好吧,下面提供一個(gè)關(guān)閉所有Activity的方法, 就是用一個(gè)list集合來存儲(chǔ)所有Activity!

具體代碼如下:

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

5.完全退出App的方法

上面說的是關(guān)閉所有Activity的,但是有些時(shí)候我們可能想殺死整個(gè)App,連后臺(tái)任務(wù)都?xì)⑺?殺得一干二凈的話,可以使用搭配著下述代碼使用:

實(shí)現(xiàn)代碼:

/** 
 * 退出應(yīng)用程序 
 */  
public void AppExit(Context context) {  
    try {  
        ActivityCollector.finishAll();  
        ActivityManager activityMgr = (ActivityManager) context  
                .getSystemService(Context.ACTIVITY_SERVICE);  
        activityMgr.killBackgroundProcesses(context.getPackageName());  
        System.exit(0);  
    } catch (Exception ignored) {}  
}

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

1)定義一個(gè)變量,來標(biāo)識(shí)是否退出

// 定義一個(gè)變量,來標(biāo)識(shí)是否退出
private static boolean isExit = false;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
isExit = false;
}
};

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!isExit) {
isExit = true;
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
// 利用handler延遲發(fā)送更改狀態(tài)信息
mHandler.sendEmptyMessageDelayed(0, 2000);
} else {
exit(this);
}
return false;
}
return super.onKeyDown(keyCode, event);}

2)保存點(diǎn)擊時(shí)間:

//保存點(diǎn)擊的時(shí)間
private long exitTime = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
                    exit();
                  }
return false;
}
return super.onKeyDown(keyCode, event);
}

7.為Activity設(shè)置過場(chǎng)動(dòng)畫

所謂的過場(chǎng)動(dòng)畫就是切換到另外的Activity時(shí)加上一些切換動(dòng)畫,比如淡入淡出,放大縮小,左右互推等! 當(dāng)然,我們并不在這里詳細(xì)講解動(dòng)畫,后面有專門的章節(jié)來講解這個(gè),這里只教大家如何去加載動(dòng)畫,另外 給大家提供了一些比較常用的過渡動(dòng)畫,只要將相關(guān)動(dòng)畫文件添加到res/anim目錄下,然后下述方法二選一 就可以實(shí)現(xiàn)Activity的切換動(dòng)畫了!

1)方法一:

7.png

2)方法二:

通過style進(jìn)行配置,這個(gè)是全局的哦,就是所有的Activity都會(huì)加載這個(gè)動(dòng)畫!

實(shí)現(xiàn)代碼如下:

①在style.xml中自定義style:

<!-- 默認(rèn)Activity跳轉(zhuǎn)動(dòng)畫 -->
<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/anim_stay</item>
    <item name="android:activityCloseEnterAnimation">@anim/anim_stay</item>
    <item name="android:activityCloseExitAnimation">@anim/default_anim_out</item>
</style>

解釋:

4個(gè)item分別代表:

  • Activity A跳轉(zhuǎn)到Activity B時(shí)Activity B進(jìn)入動(dòng)畫;
  • Activity A跳轉(zhuǎn)到Activity B時(shí)Activity A退出動(dòng)畫;
  • Activity B返回Activity A時(shí)Activity A的進(jìn)入動(dòng)畫
  • Activity B返回Activity A時(shí)ActivityB的退出動(dòng)畫

②然后修改下AppTheme:

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

③最后在appliction設(shè)置下:

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

好的,動(dòng)畫特效就這樣duang一聲設(shè)置好了~

3)其他

好的,除了上面兩種方法以外,還可以使用TransitionManager來實(shí)現(xiàn),但是需求版本是API 19以上的, 另外還有一種addOnPreDrawListener的轉(zhuǎn)換動(dòng)畫,這個(gè)用起來還是有點(diǎn)麻煩的,可能不是適合初學(xué)者 這里也不講,最后提供下一些常用的動(dòng)畫效果打包,選擇需要的特效加入工程即可!Activity常用過渡動(dòng)畫.zip


8.Bundle傳遞數(shù)據(jù)的限制

在使用Bundle傳遞數(shù)據(jù)時(shí),要注意,Bundle的大小是有限制的 < 0.5MB,如果大于這個(gè)值 是會(huì)報(bào)TransactionTooLargeException異常的?。。?/p>


9.使用命令行查看當(dāng)前所有Activity的命令:

使用下述命令即可,前提是你為SDK配置了環(huán)境變量:adb shell dumpsys activity


10.設(shè)置Activity全屏的方法:

1)代碼隱藏ActionBar

在Activity的onCreate方法中調(diào)用getActionBar.hide();即可

2)通過requestWindowFeature設(shè)置

requestWindowFeature(Window.FEATURE_NO_TITLE); 該代碼需要在setContentView ()之前調(diào)用,不然會(huì)報(bào)錯(cuò)!?。?/p>

注:把 requestWindowFeature(Window.FEATURE_NO_TITLE);放在super.onCreate(savedInstanceState);前面就可以隱藏ActionBar而不報(bào)錯(cuò)。

3)通過AndroidManifest.xml的theme

在需要全屏的Activity的標(biāo)簽內(nèi)設(shè)置 theme = @android:style/Theme.NoTitleBar.FullScreen


11.onWindowFocusChanged方法妙用:

我們先來看下官方對(duì)這個(gè)方法的介紹:

就是,當(dāng)Activity得到或者失去焦點(diǎn)的時(shí)候,就會(huì)回調(diào)該方法! 如果我們想監(jiān)控Activity是否加載完畢,就可以用到這個(gè)方法了~ 想深入了解的可移步到這篇文章:onWindowFocusChanged觸發(fā)簡(jiǎn)介


12.定義對(duì)話框風(fēng)格的Activity

在某些情況下,我們可能需要將Activity設(shè)置成對(duì)話框風(fēng)格的,Activity一般是占滿全屏的, 而Dialog則是占據(jù)部分屏幕的!實(shí)現(xiàn)起來也很簡(jiǎn)單!

直接設(shè)置下Activity的theme:

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

這樣就可以了,當(dāng)然你可以再設(shè)置下標(biāo)題,小圖標(biāo)!


//設(shè)置左上角小圖標(biāo)
requestWindowFeature(Window.FEATURE_LEFT_ICON);
setContentView(R.layout.main);
getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_lion_icon);
//設(shè)置文字:
setTitle(R.string.actdialog_title);  //XML代碼中設(shè)置:android:label="@string/activity_dialog"

本節(jié)小結(jié):

好的,本節(jié)我們又學(xué)習(xí)了一下Activity在實(shí)際開發(fā)中的一些常見問題,相信在實(shí)際開發(fā)中會(huì)幫到大家的! 下節(jié)我們來學(xué)習(xí)Activty的棧的概念,以及四種加載模式!敬請(qǐng)期待~謝謝~