Android Support兼容包(兼容问题总结)

来源:互联网 发布:淘宝网钻石展位 编辑:程序博客网 时间:2024/06/08 11:30

前言

构建一个可以跑在不同版本 Android 平台的软件,是非常复杂和耗时的。为了解决这个问题,Android 推出了 Android Support Library (安卓兼容包),让新的UI控件也可以跑在早期的 Android 版本。

Support Library了解

我们都知道Android一些SDK比较分裂,为此google官方提供了Android Support Library package
系列的包来保证高版本sdk开发的向下兼容性,
所以你可能经常看到v4,v7,v13这些数字,首先我们就来理清楚这些数字的含义,以及它们之间的区别。

  • support-v4

这个包是兼容API lever 4(即Android 1.6)或者更高版本之上。它包含了相对更多的内容,而且用的更为广泛,例如:Fragment,NotificationCompat,LoadBroadcastManager,ViewPager,PageTabAtrip,Loader,FileProvider 等

Gradle引用方法:compile ‘com.android.support:support-v4:21.0.3’

  • support-v7

这个包是兼容API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。目前v7包已经包含了v4包。所以这个兼容包是开发中最常用的。

Gradle引用方法:compile ‘com.android.support:appcompat-v7:21.0.3’

  • support-v13

这个包的设计是为了API level 13(即Android 3.2)及更高版本的,一般我们都不常用,平板开发中能用到,这里就不过多介绍了。

兼容包中的Theme 主题

  • Hoho Theme

在4.0之前Android可以说是没有设计可言的,在4.0之后推出了Android Design,从此Android在设计上有了很大的改善,而在程序实现上相应的就是Holo风格,所以你看到有类似Theme.Holo.Light、 Theme.Holo.Light.DarkActionBar 就是4.0的设计风格,但是为了让4.0之前的版本也能有这种风格怎么办呢?这个时候就不得不引用v7包了,所以对应的就有Theme.AppCompat.Light、 Theme.AppCompat.Light.DarkActionBar,如果你的程序最小支持的版本是4.0,那么可以不用考虑v7的兼容。

  • Material Design Theme

对于5.0版本,Android推出了Material Design的概念,这是在设计上Android的又一大突破。对应的程序实现上就有 Theme.Material.Light、 Theme.Material.Light.DarkActionBar等,但是这种风格只能应用在在5.0版本的手机,如果在5.0之前应用Material Design该怎么办呢?同样的引用appcompat-v7包,这个时候的Theme.AppCompat.Light、Theme.AppCompat.Light.DarkActionBar就是想对应兼容的Material Design的Theme。

兼容包中的Activity

Activity extend 兼容Activity

Activity继承结构图:

这里写图片描述

3.0之后,可以使用Fragment了,support v4 提供了1.6~3.0的Fragment兼容,所以如果需要用兼容版的Fragment,则需要继承support v4提供的FragmentActivity。

获得Manager的方式也不同:3.0以下:getSupportFragmentManager() 3.0以上:getFragmentManager() 

再后来,ActionBar也被向前支持了,这次是出现在support v7里,如果需要使用兼容版的ActionBar,则继承support v7提供的ActionBarActivity(它是继承FragmentActivity的)。

5.0提供了很多很多新东西,于是support v7也更新了,出现了AppCompatActivity

注意:(初期AppCompat仅仅只是让ActionBar兼容到API 7。在AppCompat 21版本中,加入主题色、Toolbar等功能。显然ActionBarActivity这个名字已经不在适用AppCompat。新版本中,推荐使用AppCompatActivity 代替ActionBarActivity (这个类已过时))

注意事项

gradle引用appcompat-v7包的时候就不需要引用v4了,因为v7里默认包含了v4包;

compile ‘com.android.support:appcompat-v7:21.0.3’ 中的21代表API level 21推出的兼容包,所以如果你引用的是21之前的版本,则默认这些Theme.AppCompat.Light是Holo风格的,从21开始的版本默认是Material风格