編輯:關於Android編程
做一個簡單的記錄。
google搞了一大套 dip、sp、mdpi、hdpi、xhdpi之類的這些東西,簡單說來,就是為了讓我們輕松實現“與設備密度無關的視覺大小一致性”,注意這裡的“視覺大小一致性”,就是說無論是在手機、低分辨率平板、高分辨率平板上,一個控件或者一個圖片在物理尺寸上都是一樣大小的。
這裡我們借 @雨打萍 的一張圖片來看看:
其中,黑色和藍色矩形的視覺大小就是一致的。
有了這個前提,再來看android的適配規則就很清楚了:
我們經常會給應用程序切幾套圖片,放在drawable-mdpi、drawable-hdpi、drawable-xhdpi等目錄下面。當應用在設備對應dpi目錄下沒有找到某個資源時,遵循“先高再低”原則,然後按比例縮放圖片:
比如,當前為hdpi設備,並且只有以下幾個目錄,則drawable的尋找順序為:這很好理解,如果我們按規則放置圖片,mdpi中為48x48,xxhdpi中為144x144,那麼不管我們最後從哪個目錄拿到圖片,得到的都是72x72的圖。由於hdpi定義了72個像素點的物理尺寸,那麼這張圖的物理尺寸實際就被定下來了。
同樣的,mdpi中48個像素點的物理尺寸與hdpi中72個像素點的物理尺寸是相同的,這就保證了該圖片在任何設備上顯示出的視覺大小一致。這一點在非規則密度上也是相同的(例如189dpi)。
那麼,一個結論就是,如果你希望在各設備上保持圖片視覺大小一致,也能接受android為你拉伸/壓縮圖片導致一定程度的模糊或者銳化,那麼提供一個drawable目錄就夠了。(現在最常用的應該是drawable-xhdpi)。
當然,在某些情況下,我們會主觀希望打破android提供的“視覺大小一致”這種機制,此時我們就可以建立另外的drawable目錄來放置需要變化的圖片了。
values目錄用來放置colors.xml,dimens.xml,strings.xml等,也可以根據屏幕密度設置特定的values目錄讓滿足設定的設備進行加載,比如values-mdpi、values-hdpi、values-xhdpi、values-xxhdpi等等,然後每個目錄放置一個demins.xml,使不同分辨率的設備應用不同的尺寸設置。當應用設備在當前dpi對應目錄的demins.xml中沒有找到目標條目時,采用“就近匹配”原則:
比如,當前為hdpi設備,並且只有以下幾個目錄,則values的尋找順序為:那麼,我們需要將mdpi目錄下的值都乘以相應的倍數來放置在其他目錄下面嗎?答案當然是否定的,由於我們對期望屏幕密度無關的值都定義為了dp或者dip的單位,無論android從哪個目錄最終找到該值,都會直接應用這個值與當前設備的密度來計算最終的尺寸。
也就是說,如果我們同樣在values-xhdpi和values下寫 length=10dp
那麼在hdpi設備上得到的都是15px
在xhdpi設備上得到的都是20px
但它們看起來“都是一樣寬”,這樣就已經是“保證視覺大小一致性了”。
那麼,既然最後都要找到values,並且能夠保證視覺大小一致,那何必再添加其他values分辨率目錄呢?答案是在某些情況下,我們主觀希望某些尺寸不去保持視覺一致性。例如一個Button,在手機上那麼大剛好,但如果在平板設備上,是的,它看起來和在手機上一樣大,但是,它顯得有點小了。
也就是說,我們應該把希望在任何設備上視覺大小都一樣的尺寸都放置在values目錄下並且只放置這一份,其他需要有變化的尺寸則放置在對應目錄下即可
一般而言,使用在物理尺寸相差不大的幾套設備上,一個values可能就夠了,因為它本身就保證了“視覺大小一致性”,但是如果你的應用需要兼容平板,甚至電視,那麼這種一致性可能是一種災難。這時可以考慮添加一個對應dpi的values目錄,把需要變化的值拷貝進去重寫,但我更推薦采用values-xhdpi-2560x1600,我們很容易通過這裡的屏幕分辨率+dpi計算得到該設備的物理尺寸,顯而易見這是一個平板設備,如此我們的改動便不至於影響同DPI的低物理尺寸設備(手機),而物理尺寸差不多的設備是可以共用一套dimens.xml的。
那麼,如果當前設備為xhdpi-1184x800,當前目錄有values-xhdpi-1184x800,values-xhdpi-1184x960,values-xhdpi-1184x720,android的尋找順序則是:只向低於自己分辨率的目錄下尋找,直到values-xhdpi,如果依然沒有找到,按照之前的順序繼續進行。
也就是說,對於同dpi的多台不同分辨率平板設備,如果布局足夠通用,我們可以只針對最低分辨率設計dimens即可,上面的例子中,則是values-xhdpi-1184x720。
我們還可以將這個分辨率寫得更低,低到我們有把握:如果再出現比這個分辨率更低的設備,那麼它的物理尺寸一定滿足即使采用values-xhdpi中針對手機物理尺寸設計的大小也沒有問題。
0.簡介GridView 和 ListView 有共同的父類:AbsListView,因此 GridView 和 ListView 具有一定 的相似性。GridView與
一、概述講解優化查詢相冊圖片之前,我們先來看下PM提出的需求,PM的需求很簡單,就是要做一個類似微信的本地相冊圖片查詢控件,主要包含兩個兩部分:進入圖片選擇頁面就要顯示出
有時候我們保存文件總會用到文件浏覽器功能.那麼今天博主帶大家做一個。那麼開始,浏覽文件,我們就需要寫一個文件工具類。import java.io.File; import
ListView 控件可使用四種不同視圖顯示項目。通過此控件,可將項目組成帶有或不帶有列標頭的列,並顯示伴隨的圖標和文本。可使用 ListView 控件將稱作 ListI