編輯:關於Android編程
轉載請注明出處:http://blog.csdn.net/zhaokaiqiang1992
本文主要介紹了當我們使用限定符修飾我們的資源文件夾,例如drawable-en-ldpi時,Android系統是根據什麼規則對這些文件夾進行篩選和選擇的。
本文不是嚴肅翻譯,想查看原文的請戳 Providing Resources
我們都知道,當我們使用限定符修飾資源文件夾,比如說drawable或者是values的時候,Android系統會根據運行時所在的設備屬性和配置,來動態的選擇最合適的資源文件,那麼,這個過程具體是如何進行的呢?我們下面就以drawable文件夾為例,詳細的介紹這個選擇的過程和注意事項。
現在我們要假設這樣一種情況,我們在下面這些文件夾裡面都包含同一張圖片的不同版本:
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/並且假設我們的運行時設備配置如下:
Locale = en-GB Screen orientation = port Screen pixel density = hdpi Touchscreen type = notouch Primary text input method = 12key通過比較設備配置和上面這些可用的限定符修飾的這些drawable文件夾,最終Android設備選擇了來自drawable-en-port文件夾的的圖片。
系統是根據下面的邏輯來判斷為什麼要選擇這個文件夾裡面的圖片的:
翻譯版本:
首先排除和設備配置想矛盾的drawable文件夾。因為drawable-fr-rCA/這個文件夾和語言環境en-GB相矛盾,所以直接就被排除掉了。現在我們的資源文件夾情況如下:
drawable/ drawable-en/注意:屏幕的像素密度修飾符,不會因為與設備配置不一樣而被排除掉,即使我們的設備現在是hdpi,但是drawable-port-ldpi/也不會因為限定符的原因被排除,因為在這個階段,所有的屏幕密度都被考慮進行適配。更多信息請參考Support Multiple Screen。
2. 按照表格中的順序,選擇下一個高優先級的修飾限定符。(從MCC開始,一直往下)
限定符的順序如下所示,從上到下,優先級遞減。因為好多很少用到,所以這是一部分,更加詳細的請參考原文。
3. 有沒有文件夾包含這些限定符?
- 如果是NO,就返回第二步,然後看下一個限定符。(在這個例子裡面,在找到語言限定符之前回答都是NO)
- 如果是YES,繼續第四步。
4. 排除不包含這個限定符的資源文件夾。在這個例子裡面,系統會排除所有不包含語言限定符的資源文件夾。
警告:如果上面提到的限定符是屏幕密度,那麼系統就會選擇最接近設備屏幕密度的資源文件夾。通常來說,Android更傾向於縮小一個比較大的圖片而不是放大一個比較小的圖片。
5. 返回上去,並且重復2,3,4步,一直到只有一個文件夾剩下。在這個示例中,屏幕方向是下一個限定符,所以說,不指定屏幕方向限定符的文件夾就被排除了。
現在就剩下我們的文件夾drawable-en-port/了。
雖然在我們請求每個資源文件的時候,這個步驟都會執行,但是系統對一些方面進行了優化。一旦我們的設備配置已知,那麼那些永遠不可能匹配的文件夾就會被排除出去。舉例來說,如果我們的語言配置是英語,那麼有其他語言限定符的資源文件夾就被系統排除出去,不再進行檢查,這樣就可以提高我們的性能。當然,那麼沒有指定語言限定符的資源文件夾還是存在的。
當我們選擇一個基於屏幕尺寸的限定度的時候,如果沒有非常適合的資源文件夾,那麼系統就會選擇比當前屏幕小的資源文件夾。舉例來說,如果我們沒有為large屏幕配置合適的資源文件,那麼系統就會選擇normal屏幕大小的資源。然而,如果當前可選的資源文件夾的屏幕尺寸修飾限定符比現在的屏幕大,那麼我們的系統不會使用這些資源,而是會直接崩潰。舉例來說,如果我們的布局資源只有xlarge限定符,如果我們在normal-size設備運行,就會直接崩潰。
注意:前面的限定符的優先級順序比限定符的數量更加重要。舉例來說,在第四部之前,可選的資源文件夾裡面drawable-port-notouch-12key可能有三個限定符符合現在的設備,而drawable-en只有一個限定符符合,但是因為語言限定符的優先級比較高,所以drawable-port-notouch-12key文件夾就直接被排除了。
一個項目的需求,之前一篇博客寫過如何生成excel,生成後的excel要發送給用戶(指定郵箱)。奇葩的後台說這個發送也不好實現,要客戶端來做。也就只能做了(又是分分鐘要來
在定義了將要被OpenGL繪制的形狀之後,你當然想要繪制它們。使用OpenGL ES 2.0繪制圖形需要的代碼可能比你想象的要多,因為API提供了大量的圖形渲染管道控制接
使用了RecyclerView嵌套RecyclerView的方案。購物車的第一個界面為RecyclerView,每個Item裡面包含一個店鋪。在Item中使用Recycl
今天,我們就來談下android中圖片的變形的特效,在上講博客中我們談到android中圖片中的色彩特效來實現的。改變它的顏色主要通過ColorMatrix類來實現。現在