android圖片屏幕適配
1. Android屏幕適配的哪些事
為了保證用戶獲得一致的用戶體驗效果,使得某一元素在Android不同尺寸、不同解析度的手機上具備相同的顯示效果,則需要我們進行屏幕適配。
基礎概念
屏幕尺寸
屏幕尺寸是指屏幕對角線的長度,單位是英寸,1 inch=2.54 cm
屏幕解析度
手機在橫向和縱向上的像素點數總和,單位是像素(pixel),1px = 1像素點,舉個栗子,1080x1920,即寬度方向上有1080個像素點,在高度方向上有1920個像素點。
屏幕像素密度
每英寸像素點個數,單位是dpi,dots per inch。為簡便起見,Android 將所有屏幕密度分組為六種通用密度: 低、中、高、超高、超超高和超超超高。
ldpi(低)~120dpi
mdpi(中)~160dpi
hdpi(高)~240dpi
xhdpi(超高)~320dpi
xxhdpi(超超高)~480dpi
xxxhdpi(超超超高)~640dpi
- dimen_example2.png
- 即使使用dp,依然不能解決屏幕解析度的適配問題,我們可以針對不同的屏幕創建不同的dimen值。

2. 怎麼樣讓Android實現全屏幕適配
一、關於布局適配
1、不要使用絕對布局
2、盡量使用match_parent 而不是fill_parent 。
3、能夠使用權重的地方盡量使用權重(android:layout_weight)
4、如果是純色背景,盡量使用android的shape 自定義。
5、如果需要在特定解析度下適配,可以在res目錄上新建layout-HxW.xml的文件夾。比如要適配1080*1800的屏幕(魅族MX3採用此解析度)則新建layout-1800x1080.xml的文件夾,然後在下面定義布局。Android系統會優先查找解析度相同的布局,如果不存在則換使用默認的layout下的布局。
二、關於圖片製作
1、關於設計:
設計圖先定下一個要設計的尺寸,而且盡量採用在目前最流行的屏幕尺寸(比如目前占屏幕比重比較多的是480系列,也即是480*800或者400*854,下面的圖標製作也在次基礎上進行比例的換算)上設計。
先了解一下屏幕的級別:
屏幕級別:
注意屏幕級別是按照密度分級,和像素沒有關系。如果非要讓密度和像素扯上關系,則需要一個參照系,android使用mdpi級別作為標准參照屏幕,也就是說在320*480解析度的手機上一個密度可以容納一個像素。然後其他密度級別則在此基礎上進行對比。如果理想情況下,480*800的屏幕一個密度可以容納1.5個像素。
物理大小:
單位是英寸而不是像素,也就說一個英寸在任何解析度下顯示的大小都是一樣的,但是像素在密度不同的手機裡面顯示的實際的大小是不一樣的(這就是為什麼android手機需要適配的原因)。
然後就是重點。
假設1像素在160密度下顯示1英寸,則1像素在240密度基礎上顯示大約0.67英寸,在320密度下顯示0.5英寸。於是就出現一種情況,在電腦上的一個像素,在不同的手機上看實際的大小不一樣。那麼怎麼讓「設計效果」在不同的手機上看起來顯示的區域一樣呢?
還是假設一個像素在160密度下的顯示在一個密度內,也假設就是一英寸。那麼需要幾個像素才能在240密度級別下顯示在一英寸范圍內呢?答案是1.5個像素(根據上圖的比率換算)。
了解了這個關系,接下來就是圖標的製作。
2、關於切圖。
關於切圖有幾個建議:
第一,長寬最好是3的倍數(根據android的推薦logo圖標的大小是48(mdpi),72(hdpi),96(xhdpi)得出的最小公約數)。
第二,長寬最好是偶數。因為奇數在進行等比壓縮的時候可能有問題。
第三,根據上面兩條,如果長寬是6的倍數最理想。
第四,如果可以拉伸而不改變設計意圖的情況下,比如純色背景,則使用android的9path工具製作成.9的圖片。
3、關於圖標的適配。
然後接下來的一切就和設計稿沒什麼關系。在切好圖的基礎上,根據屏幕密度、像素和實際大小的比例關系。假如設計司在480*800的解析度下做好了設計圖,並且切好圖,如果你需要適配720*1280屏幕,該怎麼做?根據比例,他們的關系是2:3,於是你需要按照1.5倍比例製作圖標,比如你在480*800的設計稿上切下來一個20*20像素的圖,那麼你就需要製作一個等比放大成30*30像素的圖標,這樣同一個圖標在480*800的屏幕和720*1280的屏幕上顯示的實際大小才一樣。同理,如果你需要適配xxhdpi則需要在20*20的基礎上製作一個等比放大成40*40像素的圖標。
4、關於圖標的目錄,480*800切下來的圖我們放在drawable-hdpi目錄下,按照2:3放大的圖標放在drawable-xhdpi目錄下,按照2倍放大的圖標放在drawable-xxhdpi目錄下。
android會根據手機的密度優先查找對應的目錄的資源,
比如408*800解析度下的手機如果密度是160,則自動載入drawable-hdpi這個目錄下的圖標,
如果720*1280密度是240的手機自動載入drawable-xhdpi這個目錄下的圖標。如果沒有這個文件夾,則查找和240最接近的對應密度文件夾。
三、其它
接下來要說的估計會讓你失望,根據上面的步驟也不能完全解決適配的問題,只能是大概適配,而就算根據上面的步驟大概適配了,實際在手機上的效果也有出入。
比如魅族MX3的解析度是1080*1800,標准情況下密度是480,但是他的密度大約是524,和480接近,也就是會查找drawable-xxhdpi這個資源下的文件。也就是說你在480*800解析度下切圖然後按兩倍放大的圖標在這台手機上顯示的效果還是比實際的小。
而另一個要說的問題是540*960或者640*960,他們的密度很可能是或者接近240也可能是320。於是在480*800的設計稿上切下來的圖並且進行的適配製作,在這些手機上顯示的實際大小也可能或大或小。
3. android studio怎麼做屏幕適配
一、關於布局適配建議
1、不要使用絕對布局
2、盡量使用match_parent 而不是fill_parent 。
3、能夠使用權重的地方盡量使用權重(android:layout_weight)
4、如果是純色背景,盡量使用android的shape 自定義。
5、如果需要在特定解析度下適配,可以在res目錄上新建layout-HxW.xml的文件夾。比如要適配1080*1800的屏幕(魅族MX3採用此解析度)則新建layout-1800x1080.xml的文件夾,然後在下面定義布局。Android系統會優先查找解析度相同的布局,如果不存在則換使用默認的layout下的布局。
二、術語和概念
四種屏幕尺寸分類:: small, normal, large, and xlarge
四種密度分類: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
需要注意的是: xhdpi是從 Android 2.2 (API Level 8)才開始增加的分類.
xlarge是從Android 2.3 (API Level 9)才開始增加的分類.
DPI是「dot per inch」的縮寫,每英寸像素數。
一般情況下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
三、如何做到自適應屏幕大小呢?
1)界面布局方面
需要根據物理尺寸的大小准備5套布局,layout(放一些通用布局xml文件,比如界面中頂部和底部的布局,不會隨著屏幕大小變化,類似windos窗口的title bar),layout-small(屏幕尺寸小於3英寸左右的布局),layout-normal(屏幕尺寸小於4.5英寸左右),layout-large(4英寸-7英寸之間),layout-xlarge(7-10英寸之間)
2)圖片資源方面
需要根據dpi值准備5套圖片資源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
Android有個自動匹配機制去選擇對應的布局和圖片資源
四、兩種獲取屏幕解析度信息的方法:
DisplayMetrics metrics = new DisplayMetrics();
Display display = activity.getWindowManager().getDefaultDisplay();
display.getMetrics(metrics);
//這里得到的像素值是設備獨立像素dp
//DisplayMetrics metrics=activity.getResources().getDisplayMetrics(); 這樣獲得的參數信息不正確,不要使用這種方式。
不能使用android.content.res.Resources.getSystem().getDisplayMetrics()。這個得到的寬和高是空的。
4. 安卓app設計屏幕解析度適配問題怎麼解決
為了使Android應用適應不同尺寸的屏幕,需要採取以下策略。首先,針對不同的布局,Android手機屏幕尺寸各異,包括480x320, 640x360, 800x480等。為了讓應用適應這些不同的屏幕,需要在res目錄下創建對應的布局文件夾,例如layout-640x360, layout-800x480。所有布局文件在編譯後會寫入R.java文件中,系統會根據屏幕大小自動選擇合適的布局。
其次,需要考慮到不同density的圖片。在早期版本中,只有一種drawable目錄,但從Android 2.1版本開始,引入了drawable-mdpi, drawable-hdpi, drawable-ldpi三個目錄,主要是為了支持多解析度需求。這三個目錄分別存放高解析度、中等解析度和低解析度的圖片,如WVGA (480x800), FWVGA (480x854), HVGA (320x480), QVGA (240x320)等。系統會根據設備的解析度自動從這些文件夾中選擇合適的圖片。
為了兼容不同平台和屏幕,建議在各自文件夾中存放不同版本的圖片。這樣可以確保應用在不同設備上都能正常顯示。
另外,還需要考慮屏幕方向的問題。為了實現橫屏和豎屏的自動切換,可以在res目錄下創建layout-port-800x600和layout-land兩個目錄,分別放置豎屏和橫屏的布局文件。這樣當手機屏幕方向發生變化時,系統會自動調用相應的布局文件,避免一種布局文件無法滿足兩種屏幕顯示的問題。
通過以上策略,可以有效地解決Android應用在不同屏幕尺寸和方向上的適配問題,提升用戶體驗。
5. Android 屏幕適配
1: dp: android 尺寸的基本單位。 在不同的解析度的手機裡面,1dp對應著不同數量的px, 這樣就實現了dp定義一個控制項大小的時候,在不同解析度手機里表現出相應大小的像素值。
2: 屏幕解析度: 1080下160, 表示寬度有1080個像素點而高度有2160個像素點。常見的解析度有320x480, 480x800, 720x1280, 1080x1920等。
3: 屏幕尺寸: 以寸為單位, Android設備對角線的長度
4: 像素密度: 每英寸的像素點
5: 屏幕尺寸, 解析度,像素密度 三者之間的關系:
密度(dpi)= √(寬2 + 高2)/屏幕尺寸
6: px:像素,是屏幕上顯示數據的最基本的點
7: dpi:屏幕像素密度,每英寸上的像素點數
8: sp:與dp類似,通常用於指定字體的大小,當用戶修改手機顯示的字體時,字體大小會隨之改變。
1: dp適配方案: Android自帶的原始的適配方案, 在不同的解析度手機裡面表現出相應大小的像素點。
缺點: Android的碎片化嚴重, 如果生產廠家沒有根據屏幕尺寸、解析度和像素密度的關系來規則定義, 或者出一些亂七八糟的屏幕大小,這樣的適配方案就不在適合了。
2: 寬高限定符:枚舉所有的屏幕寬高像素值,根據等比縮放去適配。如果沒有找到對應的屏幕, 則取默認的。 目前這種方案已經被棄用。
缺點:
1: 佔用資源大,會增加APK的體積。
2: 容錯機制大需要精準命中資源文件才能適配,比如1920x1080的手機就一定要找到1920x1080的限定符,否則就只能用統一的默認的dimens文件了。而使用默認的尺寸的話,UI就很可能變形。
3:AndroidAutoLayout適配方案(停止維護)
4: SW限定符適配方案:(smallestWidth最小寬度適配)
Android 會去識別屏幕可用高度或者寬度的最小尺寸的dp值。然後根據識別到的結果去對應的資源文件裡面去找尋相應的結果。
如何生成:ScreenMatch插件
此方案跟寬高限定的適配方案相比,有很好的容錯機制, 如果沒有找到對應的適配寬度, 那麼會在vlues文件裡面去找跟他最接近的寬度。
5:今日頭條適配方案:
1>: px 轉 dp 的公式 dp = px / density.不管我們設定的單位是什麼, 最終我們都會將這些單位長度轉化為px的。density就是他們的轉化比, 所以,動態改變這個轉化比也是可以達到我們適配屏幕的目的的。
2>: 通過修改density值,強行把所有不同尺寸解析度的手機的寬度dp值改成一個統一的值(在清單文件中定義),這樣就解決了所有的適配問題。
3>: Density = 當前設備屏幕總寬度(單位為像素)/ 設計圖總寬度(單位為 dp) ;
4>:引入了AndroidAutoSize屏幕適配框架:
https://github.com/JessYanCoding/AndroidAutoSize
最後, 最重要的................
點贊 點贊 點贊, 不重要的事情也就說3遍......