156

android.support.v7.app.AppCompatActivity昨天被添加到最新的v7支持庫中作爲新功能。AppCompatActivity相比ActionBarActivity有什麼增強功能?

據說ActionBarActivity已被棄用,以支持新的AppCompatActivity,並且AppCompatActivity是使用支持庫操作欄功能的活動的基類。那麼,AppCompatActivity的新功能是什麼ActionBarActivityAppCompatActivity已經超過ActionBarActivity有什麼增強功能? AppCompatActivity有什麼優點?有人可以提供一些樣品嗎?

任何提示將不勝感激。並提前致謝。

PS:最讓我吃驚的是AppCompatActivity它是從android.support.v4.app.FragmentActivity延伸的是直接父級ActionBarActivity!我的意思是現在實際上ActionBarActivity可以做任何AppCompatActivity可以做的事情,爲什麼Android推出了後者?

同時,我看到了一篇博客文章,指出:「這不是從ActionBarActivityAppCompatActivity的重命名,的AppCompat的內在邏輯是通過AppCompatDelegate可用」,有啥的AppCompat的「內在邏輯」? AppCompatDelegate能做什麼?有人可以發佈一些關於此的代碼嗎?

+0

http://android-developers.blogspot.com/2015/04/android-support-library-221.html – CommonsWare

+0

我看了它,它是一個介紹,太淺。 – SilentKnight

+1

AppCompatActivity是ActionBarActivity的父類。而更多的想法你需要研究代碼。 –

回答

139

由於克里斯寫道ActionBarActivity,新棄用版本爲ActionBarActivity(擴展爲AppCompatActivity類的版本)是使用向後兼容類的安全版本。它的棄用只是提示你直接使用新的AppCompatActivityAppCompatActivity是一個新的更通用的實現,它在內部使用AppCompatDelegate類。

如果你開始一個新的開發,那麼你應該馬上使用新的AppCompatActivity類。如果您有機會更新您的應用,請將已棄用的ActionBarActivity替換爲新的活動。否則,您可以保留棄用的活動,並且行爲完全沒有區別。

關於AppCompatDelegate,它允許您在活動中添加新的有色小工具,既不是AppCompatActivity也不是ActionBarActivity

例如,你繼承外部庫,這反過來,不繼承AppCompatActivity的活動,但您希望此活動有有色材料部件(視圖)。要做到這一點,你需要在你的活動中創建一個AppCompatDelegate實例,覆蓋該活動的方法,如addContentView(),setContentView()等(參見AppCompatDelegate javadoc獲取方法的完整列表),並在這些重寫的方法內部將調用轉發給內部AppCompatDelegate實例。 AppCompatDelegate將完成剩下的工作,您的「舊時尚」活動將「物化」。

+0

好的例子..謝謝@sergej shafarenka –

+2

你能告訴我,當我將使用Activity來代替Appcompactivity時會發生什麼?我已經搜索,但沒有得到解決方案。請幫助我 –

7

此前,AppCompat的唯一入口點是通過現在已棄用的ActionBarActivity類。不幸的是,這迫使你使用一個設置的Activity層次結構,這使得使用PreferenceActivity變得不可能。

看到克里斯巴內斯的support-libraries-v22-1-0更多信息

+1

這是克里斯的博客,非常感謝。 – SilentKnight

34

這主要是一個名稱的變化:ActionBarActivity並不能真正說明一切現在這樣。如果您願意,您可以安全地使用ActionBarActivity。把它想象爲一個符號鏈接。

+0

'AppCompatActivity'是'ActionBarActivity'的直接父類,現在'ActionBarActivity'可以做任何'AppCompatActivity'可以做的事情,爲什麼'Android'會推遲以後呢? – SilentKnight

+4

@SilentKnight:正如克里斯寫的,這主要是一個名稱的變化。引用[Android開發人員博客](http://android-developers.blogspot.com/2015/04/android-support-library-221.html):「AppCompat支持庫起始於謙虛但重要的開始:單所有API 7及更高版本的設備都採用一致的操作欄,在版本21中,它承擔了新的責任:爲所有API 7+設備帶來材質調色板,構件着色,工具欄支持等等,因此,名稱ActionBarActivity沒有真的涵蓋了它真正做到的全部範圍。「 – CommonsWare

+3

使用已棄用的類是**不安全**,因爲它們在將來的版本中可能會被刪除。雖然您可以輕鬆地將所有對ActionBarActivity的引用替換爲從支持庫中刪除(例如更新應用程序時),但我建議從現在開始避免使用它。 –

2

Android的支持庫,22.1的最新版本,不贊成贊成AppCompatActivity,這將帶來對所有設備的單一一致ActionBar開始API 7級及以上

8

AppCompatActivity支持Android的發佈程序兼容性庫引入Android的SDK

AppCompatActivity是支持v4的直接子類FragmentActivity和直接父類ActionBarActivity

AppCompatActivity是使用支持庫操作欄功能的活動的基類。

通過擴展這個類爲您的活動和活動主題設置爲Theme.AppCompat或類似的主題上API 7級或更高運行時,您可以添加一個ActionBar到您的活動。

至於支持v7 appcompat庫,它增加了對支持Action Bar用戶界面設計模式。該庫包括對材料設計用戶界面實現的支持。

這裏有幾個關鍵的類包含在程序兼容性庫中的V7:

  • ActionBar - 提供了操作欄的用戶界面 模式的實現。
  • AppCompatActivity - 添加一個應用程序的活動類,它可以被用作使用該支持庫 行動起來吧執行活動的基類 。
  • AppCompatDialog - 添加一個對話框類,可用作基礎 類AppCompat主題對話框。
  • ShareActionProvider - 添加對操作欄中包含的標準化共享操作 (例如電子郵件或發佈到社交應用程序)的支持,該操作可以是 。

下載完Android的支持庫,該庫位於/演員/安卓/支持/ V7 /程序兼容性/目錄。

+0

'android.support.v4.app.ActivityCompat'?這只是AppCompatActivity的舊名嗎? – Taylan

11

AppCompat支持庫以謙虛但重要的開始爲開端:針對所有API 7及更高版本設備的單一一致操作欄。在修訂版21中,承擔了新的責任:爲所有API 7+設備提供材質調色板,構件着色,工具欄支持等。有了這個,ActionBarActivity這個名字並沒有真正覆蓋它的全部範圍

http://android-developers.blogspot.it/2015/04/android-support-library-221.html

+0

..可以告訴我,當我將使用Activity來代替Appcompactivity時會發生什麼?我已經搜索,但沒有得到解決方案,請幫助我 –