与ActionBarActivity相比,AppCompatActivity有什么增强?


164

android.support.v7.app.AppCompatActivity 昨天作为一项新功能被添加到最新的v7支持库中。

据说ActionBarActivity已经过时了,不赞成使用新功能,AppCompatActivity而这AppCompatActivity是使用支持库操作栏功能的活动的基类。那么,AppCompatActivityover的新功能是ActionBarActivity什么?做什么改进AppCompatActivity有过ActionBarActivity?又有什么优势AppCompatActivity呢?有人可以提供一些样品吗?

任何提示表示赞赏。并预先感谢。

PS:让我最惊讶的AppCompatActivity是从android.support.v4.app.FragmentActivity的直接父类继承而来的ActionBarActivity!我的意思是实际上现在ActionBarActivity可以做任何AppCompatActivity事情,为什么Android推出了后者?

同时,我看到一篇博客文章指出:“ 这不是从ActionBarActivity到的重命名AppCompatActivityAppCompat可以通过来使用的内部逻辑AppCompatDelegate,那么的“ 内部逻辑 ”是AppCompat什么?怎么AppCompatDelegate办 有人可以为此发布一些代码吗?



我已经看过了,这是一个介绍,太浅了。
SilentKnight 2015年

1
AppCompatActivity是ActionBarActivity的父类。为了获得更多的想法,您需要研究代码。
Pankaj Kumar 2015年

是的,我注意到了这一点。
SilentKnight 2015年

Answers:


145

正如Chris所写,不推荐使用的新版本ActionBarActivity(一个扩展AppCompatActivity类)可以安全地使用向后兼容类。它的弃用只是您要求AppCompatActivity直接使用new的提示。AppCompatActivity是在AppCompatDelegate内部使用类的新的,更通用的实现。

如果您开始新的开发,则应该立即使用新AppCompatActivity类。如果您有机会更新您的应用程序,那么也请替换ActionBarActivity新活动中已弃用的应用程序。否则,您可以保留不推荐使用的活动,并且行为完全没有差异。

关于AppCompatDelegate,它允许您在既不是AppCompatActivity也不是的活动中添加新的有色小部件ActionBarActivity

例如,您从一个外部库继承了一个活动,而该外部库又不从该库继承,AppCompatActivity但是您希望该活动具有着色的材料小部件(视图)。为了实现这一点,您需要AppCompatDelegate在活动内部创建一个实例,覆盖该活动的方法,例如addContentView()setContentView()等等(AppCompatDelegate有关完整的方法列表,请参见javadoc),然后在这些被覆盖的方法内部将调用转发给内部AppCompatDelegate实例。AppCompatDelegate剩下的就做,您的“老式”活动将“具体化”。


很好的例子..谢谢@ sergej shafarenka
Rakesh L

2
您能否告诉我,当我使用活动代替Appcompactivity时会发生什么?我已经搜索过但没有找到解决方法。请帮助我
Ravindra Kushwaha 16/12/22

35

这主要是名称更改:ActionBarActivity并未真正描述它现在所做的一切。您可以根据需要安全使用ActionBarActivity。将其视为符号链接。


AppCompatActivity是的直接父类ActionBarActivity,现在ActionBarActivity可以做任何AppCompatActivity可以做的事,为什么以后Android再推?
SilentKnight 2015年

4
@SilentKnight:正如克里斯所写,这主要是改名。引用Android开发者博客:“ AppCompat支持库起初很不起眼,但重要的开始:适用于所有API 7和更高版本设备的单个一致操作栏。在版本21中,它承担了新的责任:带来实质性的调色板,小部件着色,工具栏支持,以及对所有API 7+设备的更多支持。因此,名称ActionBarActivity并不能真正涵盖其实际功能的全部范围。”
CommonsWare,2015年

3
使用不推荐使用的类是不安全的,因为它们会在将来的版本中删除。尽管您可以轻松地替换ActionBarActivity从支持库中删除时的所有引用(例如,在更新应用程序时),但我建议从现在开始避免使用它。
david.schreiber 2015年

12

AppCompat支持库以谦虚但很重要的开头开始:适用于所有API 7和更高版本设备的单个一致的操作栏。在第21版中,它承担了新的责任:为所有API 7+设备带来实质的调色板,小部件着色,工具栏支持等。这样,名称ActionBarActivity并没有真正涵盖其实际功能的全部范围

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


..您能告诉我,当我使用活动代替Appcompactivity时会发生什么?我已经搜索过但没有找到解决方法。请帮助我
Ravindra Kushwaha 16/12/22

9

AppCompatActivity自从android支持appcompat库发布以来,它已引入Android-SDK中

AppCompatActivityFragmentActivitysupport v4 的直接子类,是的直接父类ActionBarActivity

AppCompatActivity是使用支持库操作栏功能的活动的基类。

您可以ActionBarAPI级别7或更高级别上运行时为活动添加一个,方法是扩展活动的此类并将活动主题设置为Theme.AppCompat或类似的主题。

至于支持v7 appcompat库,它增加了对操作栏用户界面设计模式的支持。该库包括对材料设计用户界面实现的支持。

以下是v7 appcompat库中包含的一些关键类:

  • ActionBar -提供操作栏用户界面模式的实现。
  • AppCompatActivity-添加一个应用程序活动类,该类可以用作使用支持库操作栏实现的活动的基类。
  • AppCompatDialog-添加一个对话框类,可用作AppCompat主题对话框的基类。
  • ShareActionProvider -增加了对可包含在操作栏中的标准化共享操作(例如电子邮件或发布到社交应用程序)的支持。

下载Android支持库后,该库位于/ extras / android / support / v7 / appcompat /目录中。


android.support.v4.app.ActivityCompat呢 这只是的旧名称AppCompatActivity吗?
塔兰(Taylan)'17年

7

以前,唯一的进入点AppCompat是通过现在已弃用的ActionBarActivity类。不幸的是,这迫使您使用设置的Activity层次结构,这使诸如使用之类的事情PreferenceActivity变得不可能。

有关更多信息,请参见chris banessupport-libraries-v22-1-0


1
这是克里斯的博客,非常感谢。
SilentKnight 2015年

2

最新版本的android支持库22.1不赞成ActionBarActivity支持AppCompatActivity,它承诺会ActionBar为从API Level 7及更高版本开始的所有设备带来一个统一的标准

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.