首先,先簡單介紹一下?android:parentActivityName 。
安卓開發(fā)文檔中如此解釋:Activity 邏輯父項(xiàng)的類名稱。此處的名稱必須與為相應(yīng)?<activity>?元素的?android:name?屬性指定的類名稱一致。系統(tǒng)會(huì)讀取該屬性,以確定當(dāng)用戶按下操作欄中的“向上”按鈕時(shí)應(yīng)該啟動(dòng)哪一個(gè) Activity。 系統(tǒng)還可以利用這些信息通過?TaskStackBuilder?合成 Activity 的返回棧。要支持 API 級(jí)別 4 - 16,您還可以使用為?"android.support.PARENT_ACTIVITY"?指定值的?<meta-data>?元素來聲明父 Activity。??
簡單來說就是在當(dāng)前 Activity 的標(biāo)題欄左上角加一個(gè)返回按鈕,點(diǎn)擊后自動(dòng)返回設(shè)置的 Activity?而不是回到之前的 Task。
比如為 TestActivity?設(shè)置:
<activity android:name=".TestActivity"
? ? android:parentActivityName=".MainActivity"/>
則點(diǎn)擊左上角的返回圖標(biāo)后將自動(dòng)回到 MainActivity。
關(guān)于 android:parentActivityName?詳見官方文檔
然而,在設(shè)置該屬性后我發(fā)現(xiàn)系統(tǒng)在 Activity?切換時(shí)的過渡動(dòng)畫似乎有點(diǎn)不對(duì)勁。
首先看圖:

為了更好的演示切換時(shí)的過渡動(dòng)畫,我把?過渡動(dòng)畫縮放 設(shè)置為了 5X 。?
可以看到,正常的進(jìn)入 Activity?應(yīng)該是新 Activity?從右往左進(jìn)入并逐漸覆蓋當(dāng)前Activity。
點(diǎn)擊返回后應(yīng)該是當(dāng)前 Activity?從左往右退出,并逐漸顯露出上層 Activity。
例如:圖中的點(diǎn)擊進(jìn)入 設(shè)置界面 和退出 設(shè)置界面。
但是,通過在 AndroidManifest?中為 Activity?添加?android:parentActivityName?的方法來返回上層時(shí)卻是上層 Activity 從右往左進(jìn)入并覆蓋當(dāng)前 Activity,而非正常的當(dāng)前 Activity?從左往右退出。
例如:圖中點(diǎn)擊進(jìn)入 關(guān)于界面?后退出。
通過以上分析不難得出結(jié)論,使用?android:parentActivityName?并非是?finish?當(dāng)前 Activity?后返回上層,而是新建一個(gè)上層 Activity?來覆蓋當(dāng)前 Activity。
查詢資料得知
DisplayMessageActivity為子Activity,而MainActivity為父Activity,點(diǎn)擊 DisplayMessageActivity的左上角返回按鈕的時(shí)候,調(diào)用邏輯如下:
MainActivity.onDestroy()
MainActivity.onCreate(null)
MainActivity.onStart()?
所以系統(tǒng)在的過渡動(dòng)畫給出的是進(jìn)入 Activity?的動(dòng)畫而非退出動(dòng)畫,怪不得總覺得看起來怪怪的。
我個(gè)人的解決方案是手動(dòng)設(shè)置?Toolbar,并添加返回按鈕:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后繼承?onOptionsItemSelected ,當(dāng)點(diǎn)擊?返回?按鈕時(shí)手動(dòng)?finish :
if (id ==android.R.id.home) {
finish();
}
這樣雖然麻煩了點(diǎn),但至少動(dòng)畫看起來順眼了點(diǎn)......
如果各位大佬還有更好的方法歡迎指教~
PS:我沒有刻意去設(shè)置切換 Activity?的動(dòng)畫,都是用的系統(tǒng)默認(rèn)的過渡動(dòng)畫,所以可能不同的 ROM?動(dòng)畫效果不一樣(比如我截圖中的 MIUI 是左右滑出滑入,我使用原生安卓測(cè)試是上下滑出滑入),但實(shí)質(zhì)都是一樣的。
PPS:寫完才發(fā)現(xiàn)原來文檔里用的本來就是 “啟動(dòng)”?而非 “返回” Activity......所以說,就因?yàn)闆]好好看文檔折騰了這么久......