转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50216719 文章出自:薛瑄的博客
你也可以查看我的其他同类文章,也会让你有一定的收货!
遇到这个问题,有时候虽然解决了,但是还是不知道原理是什么,我写了这两篇文章,或许能借你心中疑惑
No resource found that matches the given name ‘@style/Theme.AppCompat.Light’
编译报错:
错误一:
No resource found that matches the given name '@style/Theme.AppCompat.Light'
参考:No resource found that matches the given name ‘@style/Theme.AppCompat.Light’
错误二:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
参考:You need to use a Theme.AppCompat theme (or descendant) with this activity.
你可能遇到过上面两个问题,其本质都是一样的,具体解决办法参考相关文章
本文深入分析探讨导致这些问题的原因、由其衍生出来的一系列问题及其解决方案。
下载支持库
查看官方文档
https://developer.android.com/topic/libraries/support-library/setup.html#download
Support Library
The Android Support Library package is a set of code libraries that provide backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs.
我们都知道Android一些SDK比较分裂,为此google官方提供了Android Support Library package 系列的包来保证高版本sdk开发的向下(后)兼容性(软件的「向前兼容」和「向后兼容」), 所以你可能经常看到v4,v7,v13这些数字,首先我们就来理清楚这些数字的含义,以及它们之间的区别。
- support-v4
用在API lever 4(即Android 1.6)或者更高版本之上。它包含了相对更多的内容,而且用的更为广泛。
例如:Fragment,NotificationCompat,LoadBroadcastManager,ViewPager,PageTabStrip,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 appcompat library 是包含在 v7 Support Libraries里面的一个包,正是此包增加了 Action Bar 用户界面的设计模式,并加入了对 material design的支持,是我们使用最多的一个兼容包。
Gradle引用方法:
compile 'com.android.support:appcompat-v7:21.0.3'
support-v13
这个包的设计是为了API level 13(即Android 3.2)及更高版本的,一般我们都不常用,平板开发中能用到,这里就不过多介绍了。v17 Preference Support Library for TV
看名字就知道了,此包主要是为了TV设备而设计。
Theme
介绍下2种Theme的概念。
Hoho Theme
在4.0(API 14)之前Android可以说是没有设计可言的,在4.0之后推出了Android Design,从此Android在设计上有了很大的改善,而在程序实现上相应的就是Holo风格
4.0(API 14)的Holo设计风格类似 如下:
- Theme.Holo.Light、
- Theme.Holo.Light.DarkActionBar
但是为了让4.0(API 14)之前的版本也能有这种风格怎么办呢?这个时候就不得不引用v7包了,所以对应的就有下面两个主题:
- Theme.AppCompat.Light
- Theme.AppCompat.Light.DarkActionBar,
如果你的程序最小支持的版本是4.0,那么可以不用考虑v7的兼容。在4.0之前的版本支持Holo风格,需要引用v7包了
Material Design Theme
今年的5.0版本,Android推出了Material Design的概念,这是在设计上Android的又一大突破。
- Theme.Material.Light、
- Theme.Material.Light.DarkActionBar
但是这种风格只能应用在5.0版本的手机,如果在5.0之前应用Material Design该怎么办呢?在5.0之前应用Material Design,需要引用appcompat-v7包,
下面两个Theme相对应兼容的Material Design的Theme:
- Theme.AppCompat.Light、
- Theme.AppCompat.Light.DarkActionBar
注意事项:
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风格。
使用appcompat之后,你的所有的Activity应该继承自ActionBarActivity,而ActionBarActivity继承自FragmentActivity,所以放心的使用Fragment; Fragment与activity生命周期关系、不同Android版本FragmentManager的差异
参考:
http://stormzhang.com/android/2015/03/29/android-support-library/
http://www.apkbus.com/android-246037-1-1.html?_dsign=361a7403
最后推荐一篇,讲解详细的文章Android Support Library的前世今生
关注我的公众号,轻松了解和学习更多技术