W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
上一節(jié)中我們對(duì)Activity一些基本的概念進(jìn)行了了解,什么是Activity,Activity的生命周期,如何去啟動(dòng)一個(gè)Activity等,本節(jié)我們繼續(xù)來(lái)學(xué)習(xí)Activity,前面也講了一個(gè)App一般都是又多個(gè)Activity構(gòu)成的,這就涉及到了多個(gè)Activity間數(shù)據(jù)傳遞的問(wèn)題了,那么本節(jié)繼續(xù)學(xué)習(xí)Activity的使用!另外關(guān)于傳遞集合,對(duì)象,數(shù)組,Bitmap的我們會(huì)在Intent那里進(jìn)行講解,這里只介紹如何傳遞基本數(shù)據(jù)!
代碼示例:
效果圖:
代碼下載:ActivityTest1.zip
代碼示例:
效果圖:
代碼下載:ActivityTest2.zip
有時(shí)我們可能會(huì)打開(kāi)了很多個(gè)Activity,突然來(lái)個(gè)這樣的需求,在某個(gè)頁(yè)面可以關(guān)掉 所有的Activity并退出程序!好吧,下面提供一個(gè)關(guān)閉所有Activity的方法, 就是用一個(gè)list集合來(lái)存儲(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();
}
}
}
}
上面說(shuō)的是關(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) {}
}
// 定義一個(gè)變量,來(lái)標(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);}
//保存點(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);
}
所謂的過(guò)場(chǎng)動(dòng)畫就是切換到另外的Activity時(shí)加上一些切換動(dòng)畫,比如淡入淡出,放大縮小,左右互推等! 當(dāng)然,我們并不在這里詳細(xì)講解動(dòng)畫,后面有專門的章節(jié)來(lái)講解這個(gè),這里只教大家如何去加載動(dòng)畫,另外 給大家提供了一些比較常用的過(guò)渡動(dòng)畫,只要將相關(guān)動(dòng)畫文件添加到res/anim目錄下,然后下述方法二選一 就可以實(shí)現(xiàn)Activity的切換動(dòng)畫了!
通過(guò)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分別代表:
②然后修改下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è)置好了~
好的,除了上面兩種方法以外,還可以使用TransitionManager來(lái)實(shí)現(xiàn),但是需求版本是API 19以上的, 另外還有一種addOnPreDrawListener的轉(zhuǎn)換動(dòng)畫,這個(gè)用起來(lái)還是有點(diǎn)麻煩的,可能不是適合初學(xué)者 這里也不講,最后提供下一些常用的動(dòng)畫效果打包,選擇需要的特效加入工程即可! Activity常用過(guò)渡動(dòng)畫.zip
在使用Bundle傳遞數(shù)據(jù)時(shí),要注意,Bundle的大小是有限制的 < 0.5MB,如果大于這個(gè)值 是會(huì)報(bào)TransactionTooLargeException異常的?。?!
使用下述命令即可,前提是你為SDK配置了環(huán)境變量:adb shell dumpsys activity
在Activity的onCreate方法中調(diào)用getActionBar.hide();即可
requestWindowFeature(Window.FEATURE_NO_TITLE); 該代碼需要在setContentView ()之前調(diào)用,不然會(huì)報(bào)錯(cuò)!??!
在需要全屏的Activity的標(biāo)簽內(nèi)設(shè)置 theme = @android:style/Theme.NoTitleBar.FullScreen
我們先來(lái)看下官方對(duì)這個(gè)方法的介紹:
就是,當(dāng)Activity得到或者失去焦點(diǎn)的時(shí)候,就會(huì)回調(diào)該方法! 如果我們想監(jiān)控Activity是否加載完畢,就可以用到這個(gè)方法了~ 想深入了解的可移步到這篇文章: onWindowFocusChanged觸發(fā)簡(jiǎn)介
在某些情況下,我們可能需要將Activity設(shè)置成對(duì)話框風(fēng)格的,Activity一般是占滿全屏的, 而Dialog則是占據(jù)部分屏幕的!實(shí)現(xiàn)起來(lái)也很簡(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é)我們又學(xué)習(xí)了一下Activity在實(shí)際開(kāi)發(fā)中的一些常見(jiàn)問(wèn)題,相信在實(shí)際開(kāi)發(fā)中會(huì)幫到大家的! 下節(jié)我們來(lái)學(xué)習(xí)Activty的棧的概念,以及四種加載模式!敬請(qǐng)期待~謝謝~
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: