Android Support 23.3.0 中對(duì)vector的支持

現(xiàn)象

Support包升級(jí)到23.3.0后练湿,在5.0之前的機(jī)器上箱残,對(duì)ImageView設(shè)置src志笼,或者對(duì)AppCompatImageView設(shè)置app:srcCompat(item為vector的select資源),應(yīng)用程序會(huì)crash韭脊。

根據(jù)Google的介紹:

For AppCompat users, we’ve decided to remove the functionality which let you use vector drawables from resources on pre-Lollipop devices due to issues found in the implementation in version 23.2.0/23.2.1 [https://goo.gl/u5suZB, https://goo.gl/fW5Tyd]. Using app:srcCompat and setImageResource() continues to work.

由于存在bug掸鹅,在23.3.0中已經(jīng)移除了在pre-Lollipop設(shè)備上使用資源獲取vector drawable的支持塞帐。

分析

根據(jù)應(yīng)用的crash報(bào)告:

Caused by android.content.res.Resources$NotFoundException
android.content.res.Resources.loadDrawable (Resources.java:1923)
android.content.res.Resources.getDrawable (Resources.java:664)
android.graphics.drawable.StateListDrawable.inflate (StateListDrawable.java:173)
android.graphics.drawable.Drawable.createFromXmlInner (Drawable.java:867)

以上為部分堆棧

select對(duì)應(yīng)到會(huì)創(chuàng)建StateListDrawable實(shí)例,并會(huì)分析該xml中的item創(chuàng)建相應(yīng)的drawable巍沙。

我們都知道葵姥,當(dāng)我們使用Support包時(shí)并將我們的Activity繼承AppCompatActivity時(shí),在setContentView的時(shí)候會(huì)使用AppCompatViewInflater來創(chuàng)建View赎瞎,將TextView實(shí)例化成AppCompatTextView牌里,將ImageView實(shí)例化成AppCompatImageView颊咬。

而在AppCompatImageView的構(gòu)造函數(shù)中务甥,會(huì)通過TintContextWrapper來使用TintResources劫持Resouces的getDrawable方法牡辽。

而在23.2.0中,該方法的代碼如下:

@Override
public Drawable getDrawable(int id) throws NotFoundException {
    return  AppCompatDrawableManager.get().onDrawableLoadedFromResources(mContext, this, id);
}

會(huì)直接調(diào)用AppCompatDrawableManager.get敞临,使得在5.0之前的版本也支持vectorDrawable态辛。

而在23.3.0中,該方法代碼修改如下:

@Override
public Drawable getDrawable(int id) throws NotFoundException {
    Drawable d = super.getDrawable(id);
    Context context = mContextRef.get();
    if (d != null && context != null) {
        AppCompatDrawableManager.get().tintDrawableUsingColorFilter(context, id, d);
    }
    return d;
}

會(huì)先調(diào)用super的getDrawable方法,由于在5.0之前的版本中挺尿,Drawable找不到vector標(biāo)簽奏黑,拋出了NotFoundException導(dǎo)致應(yīng)用的crash。

而5.0之后的版本编矾,Drawable已經(jīng)支持vector表情的解析了熟史,所以不存在這個(gè)問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窄俏,一起剝皮案震驚了整個(gè)濱河市蹂匹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凹蜈,老刑警劉巖限寞,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仰坦,居然都是意外死亡履植,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門悄晃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玫霎,“玉大人,你說我怎么就攤上這事妈橄∈竺欤” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵眷细,是天一觀的道長(zhǎng)拦盹。 經(jīng)常有香客問我,道長(zhǎng)溪椎,這世上最難降的妖魔是什么普舆? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮校读,結(jié)果婚禮上沼侣,老公的妹妹穿的比我還像新娘。我一直安慰自己歉秫,他們只是感情好蛾洛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般轧膘。 火紅的嫁衣襯著肌膚如雪钞螟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天谎碍,我揣著相機(jī)與錄音鳞滨,去河邊找鬼。 笑死蟆淀,一個(gè)胖子當(dāng)著我的面吹牛拯啦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熔任,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼褒链,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了疑苔?” 一聲冷哼從身側(cè)響起碱蒙,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夯巷,沒想到半個(gè)月后赛惩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趁餐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年喷兼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片后雷。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡季惯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臀突,到底是詐尸還是另有隱情勉抓,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布候学,位于F島的核電站藕筋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏梳码。R本人自食惡果不足惜隐圾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掰茶。 院中可真熱鬧暇藏,春花似錦、人聲如沸濒蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓮顽,卻和暖如春县好,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趣倾。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工聘惦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留某饰,地道東北人儒恋。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像黔漂,于是被迫代替她去往敵國和親诫尽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,498評(píng)論 25 707
  • Android Vector曲折的兼容之路 兩年前寫書的時(shí)候炬守,就在研究Android L提出的Vector牧嫉,可研究...
    eclipse_xu閱讀 34,929評(píng)論 30 263
  • 今天我在看某腦SVG視頻和網(wǎng)上查資料時(shí),發(fā)現(xiàn)了和某位大佬的寫文章的某種巧合(報(bào)以微妙的笑容)减途。因?yàn)閺?qiáng)迫癥酣藻,所以我想...
    仁昌居士閱讀 4,636評(píng)論 0 11
  • 曖昧,這兩個(gè)字念起來都是唇齒黏膩鳍置。 那天你來看我辽剧,我們逛了一天,吃了一天税产,直到華燈初上怕轿,你需要緊緊摟著我來幫我扛風(fēng)...
    S蘇蘇S閱讀 274評(píng)論 0 0
  • 殘花落井 漣漪又止 你是 亂指剪碎的光影 來不及、 你已來不及 挽留住漸漸老去的少年 霜落松柏 楓葉羞紅 你是與晚...
    井小小的傻兔閱讀 228評(píng)論 0 0