莫道桑榆晚,为霞尚满天。这篇文章主要讲述Android关于Theme.AppCompat相关问题的深入分析(转)相关的知识,希望能为你提供帮助。
【Android关于Theme.AppCompat相关问题的深入分析(转)】http://www.jianshu.com/p/6ad7864e005e
先来看这样一个错误:
No resource found that matches the given name ‘@style/Theme.AppCompat.Light‘
对于这个错误,相信大部分android开发者都遇到过,可能很多朋友通过百度或者Google已经解决了这个问题,但是网上大部分都只给出了解决方法。
正所谓知其然,知其所以然,本文将从此问题出发,深入分析探讨导致此问题的原因、由其衍生出来的一系列问题及其解决方案。
Android 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版本很多,新的SDK版本包含了很多新的特性,为此Google官方提供Android Support Library package来保证高版本SDK的向下兼容。通过使用此包,可以让拥有最新SDK特性的应用运行在API lever 4(即Android 1.6) 及更高版本的设备之上。
- v4 Support Library
此包用在API lever 4(即Android 1.6)及更高版本之上。它包含了较多的内容,使用非常广泛,例如:Fragment,NotificationCompat,LoadBroadcastManager,ViewPager,PageTabStrip,Loader,FileProvider 等。 - v7 Support Libraries
此包是针对API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。
Note: v7 appcompat library
v7 appcompat library 是包含在 v7 Support Libraries里面的一个包,正是此包增加了Action Bar 用户界面的设计模式,并加入了对material design 的支持,是我们使用最多的一个兼容包。
- v13 Support Library
此包是针对API level 13(即Android 3.2)及更高版本设计的,一般我们都不常用,平板开发中能用到,这里就不过多介绍了。
- v17 Preference Support Library for TV
看名字就知道了,此包主要是为了TV设备而设计。
- Hoho Theme
- Material Design Theme
问题分析由此可以得出以下情形会导致本文一开始提出的问题。
- 项目使用的是Theme.AppCompat主题,具体表现为
项目values目录styles.xml文件里面style为< resources> < style name="AppBaseTheme" parent="Theme.AppCompat.Light"> < /style> < style name="AppTheme" parent="AppBaseTheme"> < /style> < /resources>
AndroidManifest.xml文件里面android:theme="@style/AppTheme"
- 项目支持的最小SDK小于API 14(即Android4.0),具体表现为
AndroidManifest.xml文件里面,minSdkVersion
< 14,比如
< uses-sdk android:minSdkVersion="8" android:targetSdkVersion="23" />
- 项目没有导入android-support-v7-appcompat兼容包。
- 既然没有找到
Theme.AppCompat.Light
主题,那么我就不使用此主题。此时将项目values,values-v11,values-v14目录下的styles.xml文件里面的style都改为< resources> < style name="AppBaseTheme" parent="android:Theme.Light"> < /style> < style name="AppTheme" parent="AppBaseTheme"> < /style> < /resources>
- 那如果没有找到
Theme.AppCompat.Light
主题,而我们又想要使用最新的主题效果呢,还有种方法就是将AndroidManifest.xml文件里面,minSdkVersion
改成14,比如
< uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
此时再将项目values,values-v11,values-v14目录下的styles.xml文件里面style都改为
< resources> < style name="AppBaseTheme" parent="android:Theme.Holo.Light"> < /style> < style name="AppTheme" parent="AppBaseTheme"> < /style> < /resources>
- 当然以上都不是最好的方法,只是提供一种思路。最好的方法就是导入android-support-v7-appcompat库。下面具体介绍:
3.1 通过Android SDK Manager下载最新的Android Support Library。
文章图片
img1.jpg
下载完成之后,可以在以下目录找到AppCompat library
android-sdk/extras/android/support/v7/appcompat
3.2 将此目录下的项目导入到Eclipse中
文章图片
img2.jpg
3.3 右键点击我们的Android项目,选择Properties,左侧选择Android,在下方Library框里点击Add,最后选择appcompat_v7,确定。
此时问题就解决了。
文章图片
img3.jpg但在以上3.2导入appcompat_v7到Eclipse之后,有可能还会出现错误提示,比如
appcompat_v7\res\values-v23\styles_base.xml:20: error: Error retrieving parent for item: No resource found that matches the given name ‘android:Widget.Material.Button.Colored‘.
文章图片
img4.jpg
升级完成之后右键点击appcompat_v7项目,选择Properties,选择Project Build Target 为最新版本,这样就OK了。
文章图片
img5.jpg通过以上的分析,相信朋友们以后再遇到AppCompat相关的问题应该不再是问题了。欢迎大家留言讨论。
文/小池laucherish(简书作者)
原文链接:http://www.jianshu.com/p/6ad7864e005e
著作权归作者所有,转载请联系作者获得授权,并标注“ 简书作者” 。
推荐阅读
- Android 数据库读取数据显示 [5]
- Android ImageView 正确使用姿势
- Android笔记——Application的作用
- Android studio关于真机调试DDMS中的data文件夹打不开的解决方法
- 灵活运用模板在Word2010中建文档的秘技_Word专区
- 在Word2010中保存文档的技巧汇总_Word专区
- Word 2010中调整自动保存时间间隔的攻略_Word专区
- 在word2010中转换文件格式的技巧_Word专区
- Word20074招巧妙输入时间与日期_Word专区