Android關(guān)于Theme.AppCompat相關(guān)問題的深入分析

先來看這樣一個(gè)錯(cuò)誤:

No resource found that matches the given name '@style/Theme.AppCompat.Light'

對(duì)于這個(gè)錯(cuò)誤闭专,相信大部分Android開發(fā)者都遇到過炸裆,可能很多朋友通過百度或者Google已經(jīng)解決了這個(gè)問題屿储,但是網(wǎng)上大部分都只給出了解決方法项玛。

正所謂知其然肉微,知其所以然抱环,本文將從此問題出發(fā)敬拓,深入分析探討導(dǎo)致此問題的原因老速、由其衍生出來的一系列問題及其解決方案协饲。

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特性的應(yīng)用運(yùn)行在API lever 4(即Android 1.6) 及更高版本的設(shè)備之上。

  • v4 Support Library
    此包用在API lever 4(即Android 1.6)及更高版本之上而线。它包含了較多的內(nèi)容铭污,使用非常廣泛恋日,例如:Fragment,NotificationCompat嘹狞,LoadBroadcastManager岂膳,ViewPager,PageTabStrip磅网,Loader谈截,F(xiàn)ileProvider 等。
  • v7 Support Libraries
    此包是針對(duì)API level 7(即Android 2.1)及以上版本而設(shè)計(jì)的涧偷,但是v7是要依賴v4這個(gè)包的簸喂,v7支持了Action Bar以及一些Theme的兼容。

Note: v7 appcompat library
v7 appcompat library 是包含在 v7 Support Libraries里面的一個(gè)包燎潮,正是此包增加了Action Bar 用戶界面的設(shè)計(jì)模式喻鳄,并加入了對(duì)material design 的支持,是我們使用最多的一個(gè)兼容包确封。

  • v13 Support Library
    此包是針對(duì)API level 13(即Android 3.2)及更高版本設(shè)計(jì)的除呵,一般我們都不常用,平板開發(fā)中能用到爪喘,這里就不過多介紹了竿奏。
  • v17 Preference Support Library for TV
    看名字就知道了,此包主要是為了TV設(shè)備而設(shè)計(jì)腥放。

Android Theme

  • Hoho Theme

在4.0之前Android可以說是沒有設(shè)計(jì)可言的泛啸,在4.0之后推出了Android Design,從此Android在設(shè)計(jì)上有了很大的改善秃症,而在程序?qū)崿F(xiàn)上相應(yīng)的就是Holo風(fēng)格候址,所以你看到有類似 Theme.Holo.LightTheme.Holo.Light.DarkActionBar 就是4.0的設(shè)計(jì)風(fēng)格种柑,但是為了讓4.0之前的版本也能有這種風(fēng)格怎么辦呢岗仑?這個(gè)時(shí)候就不得不引用v7包了,所以對(duì)應(yīng)的就有 Theme.AppCompat.Light聚请、Theme.AppCompat.Light.DarkActionBar荠雕,如果你的程序最小支持的版本是API14(即Android 4.0),那么可以不用考慮v7的兼容驶赏。

  • Material Design Theme

Android在5.0版本推出了Material Design的概念炸卑,這是Android設(shè)計(jì)上又一大突破。對(duì)應(yīng)的程序?qū)崿F(xiàn)上就有Theme.Material.Light煤傍、 Theme.Material.Light.DarkActionBar等盖文,但是這種風(fēng)格只能應(yīng)用在在5.0版本的手機(jī),如果在5.0之前應(yīng)用Material Design該怎么辦呢蚯姆?同樣的引用appcompat-v7包五续,這個(gè)時(shí)候的Theme.AppCompat.Light洒敏、Theme.AppCompat.Light.DarkActionBar就是相對(duì)應(yīng)兼容的Material Design的Theme。

問題分析

由此可以得出以下情形會(huì)導(dǎo)致本文一開始提出的問題疙驾。

  • 項(xiàng)目使用的是Theme.AppCompat主題凶伙,具體表現(xiàn)為
    項(xiàng)目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"
  • 項(xiàng)目支持的最小SDK小于API 14(即Android4.0),具體表現(xiàn)為
    AndroidManifest.xml文件里面它碎,minSdkVersion<14镊靴,比如
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="23" />
  • 項(xiàng)目沒有導(dǎo)入android-support-v7-appcompat兼容包。

解決方案

此時(shí)的解決方法有如下幾種:

  1. 既然沒有找到Theme.AppCompat.Light主題链韭,那么我就不使用此主題偏竟。此時(shí)將項(xiàng)目values,values-v11敞峭,values-v14目錄下的styles.xml文件里面的style都改為
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light"></style>
    <style name="AppTheme" parent="AppBaseTheme"></style>
</resources>
  1. 那如果沒有找到Theme.AppCompat.Light主題踊谋,而我們又想要使用最新的主題效果呢,還有種方法就是將AndroidManifest.xml文件里面旋讹,minSdkVersion改成14殖蚕,比如
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="23" />

此時(shí)再將項(xiàng)目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>
  1. 當(dāng)然以上都不是最好的方法睦疫,只是提供一種思路。最好的方法就是導(dǎo)入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 將此目錄下的項(xiàng)目導(dǎo)入到Eclipse中


img2.jpg

3.3 右鍵點(diǎn)擊我們的Android項(xiàng)目葫松,選擇Properties瓦糕,左側(cè)選擇Android,在下方Library框里點(diǎn)擊Add腋么,最后選擇appcompat_v7咕娄,確定。
此時(shí)問題就解決了珊擂。


img3.jpg

但在以上3.2導(dǎo)入appcompat_v7到Eclipse之后圣勒,有可能還會(huì)出現(xiàn)錯(cuò)誤提示,比如
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'.

出現(xiàn)此問題的原因是appcompat_v7已經(jīng)更新到了最新版本并且高于編譯環(huán)境的SDK版本摧扇,此時(shí)在Android SDK Manager將SDK及編譯工具更新到最高版本


img4.jpg

升級(jí)完成之后右鍵點(diǎn)擊appcompat_v7項(xiàng)目圣贸,選擇Properties,選擇Project Build Target 為最新版本扳剿,這樣就OK了旁趟。

img5.jpg

通過以上的分析昼激,相信朋友們以后再遇到AppCompat相關(guān)的問題應(yīng)該不再是問題了庇绽。歡迎大家留言討論锡搜。

最后打一個(gè)廣告

純凈日?qǐng)?bào) https://github.com/laucherish/PureZhihuD
一個(gè)采用 RxJava + Retrofit + OkHttp 框架實(shí)現(xiàn)的開源軟件

純凈日?qǐng)?bào)界面

原文地址:http://www.reibang.com/p/6ad7864e005e 轉(zhuǎn)載請(qǐng)注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞧掺,隨后出現(xiàn)的幾起案子耕餐,更是在濱河造成了極大的恐慌,老刑警劉巖辟狈,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肠缔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哼转,警方通過查閱死者的電腦和手機(jī)明未,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壹蔓,“玉大人趟妥,你說我怎么就攤上這事∮度兀” “怎么了披摄?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勇凭。 經(jīng)常有香客問我疚膊,道長(zhǎng),這世上最難降的妖魔是什么虾标? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任寓盗,我火速辦了婚禮,結(jié)果婚禮上璧函,老公的妹妹穿的比我還像新娘贞让。我一直安慰自己,他們只是感情好柳譬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布喳张。 她就那樣靜靜地躺著,像睡著了一般美澳。 火紅的嫁衣襯著肌膚如雪销部。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天制跟,我揣著相機(jī)與錄音舅桩,去河邊找鬼。 笑死雨膨,一個(gè)胖子當(dāng)著我的面吹牛擂涛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聊记,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撒妈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼恢暖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狰右,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤杰捂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棋蚌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫁佳,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年谷暮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒿往。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湿弦,死狀恐怖熄浓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情省撑,我是刑警寧澤赌蔑,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站竟秫,受9級(jí)特大地震影響娃惯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肥败,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一趾浅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馒稍,春花似錦皿哨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鼓黔,卻和暖如春央勒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澳化。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工崔步, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缎谷。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓井濒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瑞你,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • afinalAfinal是一個(gè)android的ioc酪惭,orm框架 https://github.com/yangf...
    passiontim閱讀 15,434評(píng)論 2 45
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • 標(biāo)簽(空格分隔): Android Android Support兼容包詳解### Android的SDK版本很多...
    背影殺手不太冷閱讀 806評(píng)論 0 1
  • 很多人覺得雅思口語很難撞蚕,因?yàn)榉謹(jǐn)?shù)經(jīng)常提不上去润梯,但是卻不知道為何雅思口語分?jǐn)?shù)會(huì)那么難提过牙!難道是因?yàn)榭脊賶悍郑靠佳啪?..
    考雅君閱讀 353評(píng)論 0 0
  • 創(chuàng)業(yè)會(huì)變成多普通呢纺铭? 就像去麥當(dāng)勞肯德基吃個(gè)漢堡那樣普通寇钉。 當(dāng)一個(gè)人安排自己的職業(yè)規(guī)劃時(shí),創(chuàng)業(yè)就像考公務(wù)員舶赔、校招扫倡、...
    Larissa閱讀 428評(píng)論 0 0