弹窗系列:AppCompatDialog是何方神圣?

  • 在之前的项目餐饮系统中,实现弹窗经常继承自AppCompatDialog,而不是Dialog类。那么为什么要用AppCompatDialog类,而不直接继承自Dialog类?
  • AppCompatDialog类来自appcompat-v7包里面,也就是常说的support-v7,那么这个support-v7究竟是要解决什么问题了?看下面这段话:

我们开发的App需要支持的minSdkVersion=9,targetSdkVersion=11。在项目中使用了android 3.0 (API level 11)提供的ActionBar类,并且使用compileSdkVersion=11成功编译出apk。这个apk在android 3.0的设备上完美运行,但是app在android 2.3(API leve 9)的设备就会crash,报找不到ActionBar的错误。
这很好理解,因为在Android 3.0之前,是没有ActionBar这个类的。为了避免使用了最新SDK开发的app只能在搭载最新系统的设备上运行的尴尬,官方把新版系统framework中新增加的接口提出来放到了Android Support Library(支持包)中,开发者在遇到上面的情况时,就可以使用支持包中具有同样功能的ActionBar类,这个支持包会打包进App里,这样使用了新版本SDK上的功能的App,也可以兼容以前的老系统版本设备了。

总结一下,就是让app中只有新系统上才有的功能,在旧的系统上也能正常展示。

  • 还有一个问题是,很多博客中提到appcompat-v7包是在2014年的google io开发者大会上推出来,但是我并没有找到直接的证据。2014年google IO 开发者大会上推出了Material Design设计规范,是确有此事。那么,appcompat-v7与Material Design之间是否存在这某种关系了?

唯一可能的是Theme,就是Activity和Application类的主题设置。因为弹窗要实现Material Design的效果,需要设置对应的style或者theme,例如:

Android在5.0版本推出了Material Design的概念,对应的程序实现上就有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。

AppCompatDialog其他与Dialog不同的地方,还有待,继续研究!

猜你喜欢

转载自blog.csdn.net/zhangjin1120/article/details/113790048