當前位置:首頁 » 安卓系統 » android的屏幕密度

android的屏幕密度

發布時間: 2023-01-11 22:16:40

1. android density是什麼意思

Android屏幕密度(Density)和解析度概念
density值表示每英寸有多少個顯示點,與解析度是兩個概念。
不同density下屏幕解析度信息:
480*800的WVGA(density=240)
density=120時 屏幕實際解析度為240*400 (兩個點對應一個解析度)

橫屏是屏幕寬度400px 或者800dip,工作區域高度211px或者480dip
豎屏時屏幕寬度240px或者480dip,工作區域高度381px或者775dip
density=160時 屏幕實際解析度為320px*533px (3個點對應兩個解析度)
狀態欄和標題欄高個25px或者25dip
橫屏是屏幕寬度533px 或者800dip,工作區域高度295px或者480dip
豎屏時屏幕寬度320px或者480dip,工作區域高度508px或者775dip

density=240時 屏幕實際解析度為480px*800px (一個點對於一個解析度)
狀態欄和標題欄高個38px或者25dip
橫屏是屏幕寬度800px 或者800dip,工作區域高度442px或者480dip
豎屏時屏幕寬度480px或者480dip,工作區域高度762px或者775dip

2. 在 android 中,在屏幕密度為160時,1pt 大概等於多少sp

在 Android 中, 1pt 大概等於 2.22sp以上供參考,
與解析度無關的度量單位可以解決這一問題。Android支持下列所有單位。
px(像素):屏幕上的點。
in(英寸):長度單位。
mm(毫米):長度單位。
pt(磅):1/72英寸。
dp(與密度無關的像素):一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。
dip:與dp相同,多用於android/ophone示例中。
sp(與刻度無關的像素):與dp類似,但是可以根據用戶的字體大小首選項進行縮放。
解析度:整個屏是多少點,比如800x480,它是對於軟體來說的顯示單位,以px為單位的點。 density(密度)值表示每英寸有多少個顯示點,與解析度是兩個概念。apk的資源包中,

當屏幕density=240時使用hdpi標簽的資源
當屏幕density=160時,使用mdpi標簽的資源
當屏幕density=120時,使用ldpi標簽的資源。
一般android設置長度和寬度多用dip,設置字體大小多用sp. 在屏幕密度為160,1dp=1px=1dip, 1pt = 160/72 sp 1pt = 1/72 英寸.當屏幕密度為240時,1dp=1dip=1.5px.

3. Android 關於"尺寸"的那些事(dp,dip,sp,pt,px...)

屏幕大小:屏幕大小是手機對角線的物理尺寸,以英寸inch為單位。比如我的Mix 2手機屏幕大小為5.99 inches,意味著我的屏幕對角線長度為5.99inches = 5.99 * 2.54 = 15.2146cm

解析度:屏幕的像素點數,一般表示為a*b。例如某手機解析度為21601080,意味著手機屏幕的豎直方向(長)有2160個像素點,水平方向(寬)有1080個像素點。

px :Pixels ,像素;對應屏幕上的實際像素,是畫面中最小的點(單位色塊),像素大小沒有固定長度值,不同設備上1個單位像素色塊大小不同。

這么說可能有點陌生,用屏幕解析度來說,今年流行起來的「全面屏」解析度是 2160*1080,但是你也可以發現,雖然很多全面屏手機解析度一樣,但是明顯看得出來屏幕大小不一樣,這也解釋了「不同設備像素色塊大小是不同的」。

pt :1pt=1/72 inch,用於印刷業,非常簡單易用;

dpi :Dots Per Inch,每英寸點數;詳見ppi

ppi :Pixels Per Inch,每英寸像素數;數值越大顯示越細膩。計算式:ppi = 屏幕對角線像素數 / 屏幕對角線長度。

還是舉全面屏的例子,解析度2160*1080,屏幕大小是5.9inches,勾股定理可以得到對角線像素數大約是2415,那麼ppi = 2415 / 5.99 = 403.

事實上dpi 和 ppi 一定程度上可以劃等號,都表示像素密度,計算方式完全一致,只不過使用場景不一樣。dpi中的dots點屬於列印或印刷等領域,例如drawable 文件對應的就是dpi,而ppi中的pixel屬於屏幕顯示等領域

dp/dip : Density-independent Pixels,密度無關像素 - 基於屏幕物理密度的抽象單位。1dp等於 160 dpi 屏幕上的dpx,這是 系統為「中」密度屏幕假設的基線密度。在運行時,系統 根據使用中屏幕的實際密度按需要以透明方式處理 dp 單位的任何縮放 。dp 單位轉換為屏幕像素很簡單:px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等於 1.5 物理像素。在定義應用的 UI 時應始終使用 dp 單位 ,以確保在不同密度的屏幕上正常顯示 UI。

如果看完文章還是覺得很懵,那麼可以直接記住: 1dp單位在設備屏幕上總是等於1/160 inch。

sp :Scale-independent Pixels ,與 dp 單位相似,也會根據用戶的字體大小偏好進行縮放。

首先我們放上源碼中對尺寸單位的轉換

可以看到,輸入值類型為dp時,返回 value * DisplayMetrics.density,到這里我們可能會發懵:嗯?不對啊,前面我們不是通過px 和 dp 的換算公式來計算的么,怎麼這里就簡簡單單乘了一個DisplayMetrics.density?不要慌,我們先看看源碼中對DisplayMetrics.density的介紹。

源碼注釋中說到「在160dpi的屏幕下,density的值為1,而在120dpi的屏幕下,density的值為0.75」,我們可以大膽的猜測一下,120dpi下的density=0.75的原因是120dpi * 1 /160dpi=0.75。實際上,也就是這么回事。我們下面會仔細的分析。

需要補充一下,通常意義上Android 屏幕的密度,指的是像素密度dpi/ppi,對應於源碼中的DisplayMetrics.densityDpi。

為什麼引入dp?

Android 引入了dp這一單位,使得不論多大屏幕,多大dpi,顯示的效果始終保持一致。

但是根據前面我們提到的px與dp的換算公式px = dp * (dpi / 160),很顯然,由於相同解析度但不同屏幕大小的設備dpi是不同的,導致px和dp的基本不存在一個固定的換算關系,為了方便屏幕適配,Android設置了6個通用的密度,換算px與dp時採取通用密度計算,而非設備實際的密度。

以下為6種通用密度,以及其最小的解析度

得到上面通用密度之後,我們換算dp與px多了一種簡便方式。前面我們提到Android將mdpi作為基準,此時1px = 1dp,又有px = dp * (dpi / 160),所以我們可以很容易的得到以下換算:

還記不記得前面源碼中的density屬性,實際上DisplayMetrics.density = dpi / 160 ,表示的就是在某個通用密度下dp與px的換算比(1dp/1px的值)

這部分其實和程序員自身已經關系不大了,畢竟參與工作之後這些都是UI人員的活兒了。不過鑒於現在我還只是一枚在校生,還是記下來以免自己遺漏吧。

建議在xhdpi中作圖

原因嘛,首先現在主流解析度是1080p,以及最近流行起來的全面屏18:9,而xhdpi對應720p,向低dpi兼容自然沒問題,即便在xxhdpi中顯示,也會有個不錯的效果。而如果以1920*1080作圖,顯然圖片素材佔用的內存很大,而且也會增大應用安裝包的大小。

只有一個原則:資源放入對應dpi的文件夾中,Android會機智的載入合適的資源。

以drawable資源為例:

我們平時開發小項目&對UI要求不高時,只使用一套xhdpi的資源就足夠了,雖然這可能會導致在hdpi及以下的手機中有些卡頓,因為xhdpi的圖片運行在hdpi及以下的手機上會比較吃內存,不過無傷大雅。

而如果不為圖片資源犯愁時(有UI人員的支持,就是任性),就可以添加所有dpi的資源。當然,重點還是要滿足ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的規律。

好像說了不少廢話,哈哈,大概就這么多吧。

4. 修改Android手機的解析度和屏幕密度

原文: https://blog.csdn.net/CrazyApes/article/details/116994631

之前一直不知道手機的DPI還可以修改,以前測試我都是用好幾個測試機,或者通過修改開發者模式下的最小寬度去看適配的問題。吶,前段時間朋友說可以直接用adb改,趕緊記下來,省的以後忘了。

adb 命令

wm size [reset|WxH|WdpxHdp]
return or override display size. width and height in pixels unless suffixed with 'dp'.

查看解析度: wm size
修改解析度: wm size 1440x2560
還原初設置: wm size reset

測試機: 華為 FRD-DL00

wm density [reset|DENSITY]
查看密度: wm density
修改密度: wm density 480
還原設置: wm density reset

測試機: 華為 FRD-DL00

Security exception: Must hold permission android.permission.WRITE_SECURE_SETTINGS

莫慌,打開下 開發者選項 中的 USB調試(安全設置) 就行了。

有時間可以都看一下,試一試,蠻好玩的。

說起來巧了,就像前言說的我不知道手機可以改DPI,之前一直是用的開發者模式下的最小寬度修改來測試。後來發現,這個其實也是修改了DPI,仔細想想density和px還有dp的關系,就突然能明白為啥了。

手機 開發者模式

首先得打開手機的 開發者模式 ,咋打開應該不用說了把。
不知道的小夥伴可以試著去找到你手機的 系統版本 那裡一頓狂點。
然後就有驚喜了。
比如: Redmi 9A

咱就直接進入 開發者選項 里把。
找到 繪圖 模塊下的 最小寬度 欄目。
點開之後直接輸入想要的最小寬度就行了。
注意: 這里是以 dp 為單位的。
如果你的UI設計圖的寬度跟你的手機不符,開發的時候,可以嘗試修改這個達到演示的目的。

如下: Redmi 9A

由於輸入的是寬度值,無法直觀的看到 density 的變化,但是咱們可以用方式一去驗證下,就可以看到它的變化是改了 density 的值的。

機型:Redmi 9A

可見,在 解析度 不變的前提下,修改了最小寬度之後,設備的 density 發生了變化。

Android中的dp在渲染前會將dp轉為px,計算公式:
px = density * dp;
density = dpi / 160;
px = dp * (dpi / 160);

原文: https://blog.csdn.net/CrazyApes/article/details/116994631
參考: https://developer.android.google.cn/guide/practices/screens_support

5. iOS、Android 開發單位換算及 UI 切圖要求

在移動端 UI 設計中,經常會用到的單位有 4 種:px、pt、dp 和 sp,很多人分辨不清這幾種單位及其換算關系,以及 iOS 和 Android 的切圖要求,我在這里做下簡單的介紹,希望大家讀完後能有所收獲(如有錯誤,歡迎糾正)。

px 即 pixel,像素點,電子屏幕上組成圖像的最基本單位,在描述屏幕解析度時也會使用該單位。1px 表示一個像素,例如 iPhone 8 的尺寸為 750px × 1334px,表示在該手機屏幕上,水平方向每行有 750 個像素點,垂直方向每列有 1334 個像素點。

pt 即 point,有兩個含義:一是印刷行業常用單位,是一個標准長度單位,絕對大小,1pt = 1/72 英寸 = 0.35mm;二是 iOS 開發用的基本單位,當設計師以 1 倍尺寸進行設計 (375pt × 667pt) 並給出標注稿時,開發人員無需除以 2 便可直接使用。

dp 是安卓開發用的基準單位,在 dpi (屏幕像素密度,即每英寸包含的像素點) 為 160 的屏幕為上,1dp = 1px。為了簡單起見,Android 把屏幕密度分為了 5 種:mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi,下文會詳細介紹其換算關系。

安卓系統里,sp 與 dp 類似,不同的是 sp 可以根據用戶的字體大小首選項進行縮放,而 dp 則不會。 盡量使用 dp 作為空間大小單位,sp 作為文字相關大小單位,例如:新聞類和簡訊類等大篇幅文本,推薦使用 sp 為單位。

在 iOS 開發中,不同機型的 iPhone 設備需要用到不同倍率的切圖,下表格為各 iPhone 機型顯示屏參數對比:

這里再簡單了解下兩個概念,ppi 和 dpi。

ppi (iOS):即 pixel per inch,屏幕像素密度,表示每英寸所包含的像素點,該值越高,屏幕越細膩。
dpi (iOS) :開發像素密度,表示每英寸所包含的開發像素點。

在 iOS 開發中,規定以 ppi = 163,dpi = 163 作為開發基準,

當 ppi = 163,dpi = 163 時,則 1pt = 1px;
當 ppi = 326,dpi = 163 時,則 1pt = 2px;
當 ppi = 401,dpi = 154 時,則 1pt = 2.6px ≈ 3px。
(為什麼 iPhone 8+/7+/6+ 的開發基準是154?可能要問問蘋果了...)

依此類推,得出換算公式一:

若有小數,四捨五入即可。

在 iOS 開發中,目前只需要 @2x 和 @3x 兩種切圖,所以導出 2 倍和 3 倍的 png 圖片即可。導出前注意檢查切圖是否存在半像素、毛邊等情況,保證對齊像素,這樣才能有效避免上線後頁面上的 icon 出現虛邊的問題,提高細節質量。

另外補充一點:從整體開發尺寸看,iPhone 8 是 375 × 667 pt (@2x),而 iPhone X 是 375 × 812 pt (@3x),同樣的寬度,一個用 @2x 圖,一個用 @3x 圖,iPhone X 表現出了更高的清晰度,如圖 2-1 所示。

在 Android 開發中,因為機型參差不齊,需要用屏幕密度來區分設計。

注意,這里的 dpi (Android) 和上文的 dpi (iOS) 是不同的概念,dpi (iOS) 是開發像素密度,而 dpi (Android) 即 dot per inch,表示屏幕像素密度 ,類似 iOS 開發里的 ppi。

Android 中,規定以 dpi = 160 為開發基準,

當 dpi = 160,基準dpi = 160,1dp = 1px;
當 dpi = 240,基準dpi = 160,1dp = 1.5px;
當 dpi = 320,基準dpi = 160,1dp = 2px。

依此類推,得出換算公式二:

在設計圖標時,對於 5 種主流的屏幕像素密度 (mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi) 應按照 2:3:4:6:8 的比例進行縮放,如圖 3-1 所示。

例如,一個啟動圖標的尺寸為 48 × 48 dp,這表示在 mdpi 的屏幕上其實際尺寸應為 48 × 48 px;在 hdpi 的屏幕上其實際大小是 mdpi 的 1.5 倍 (72 × 72 px);在 xhdpi 的屏幕上其實際大小是 mdpi 的 2 倍 (96 × 96 px),依此類推。

在某些況行下,還需要提供一種特殊的切圖: 點九圖 (上圖所示)。點九圖是 Android 開發中用到的一種特殊格式的圖片,文件名以 「.9.png」 結尾。

這種圖片能告訴程序,圖像哪一部分可以被拉升,哪一部分不能被拉升需要保持原有比列。運用點九圖可以保證圖片在不模糊變形的前提下做到自適應,比如對話框背景圖片就會用到點九圖。

--
以上是全部內容,感謝你的閱讀!
End

6. 安卓UI設計中屏幕實際密度與系統密度的區別

實際密度」就是我們自己算出來的密度,這個密度代表了屏幕真實的細膩程度,如上述例子中的440dpi就 是實際密度,說明這塊屏幕每寸有440個像素。5英寸1080×1920的屏幕密度是440,而相同解析度的4.5英 寸屏幕密度是490。如此看來,屏幕密度將會出現很多數值,呈現嚴重的碎片化。而密度又是安卓屏幕將界 面進行縮放顯示的依據,那麼安卓是如何適配這么多屏幕的呢?
其實,「交互時代」認為每部安卓手機屏幕都有一個初始的固定密度,這些數值是120、160、240、320、 480,我們權且稱為「系統密度」。大家發現規律沒有?相隔數值之間是2倍的關系。一般情況下,240× 320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即mdpi;480×800的屏幕是高密度 240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的屏幕是超超高密度480dpi ,即xxhdpi。

7. Android中圖片大小和屏幕密度的關系講解

1、屏幕密度:指的就是單位英寸面積上的像素點數,與解析度是兩個不同的概念。
ldpi: 屏幕密度為120的手機設備
mdpi: 屏幕密度為160的手機設備(此為baseline,其他均以此為基準,在此設備上,1dp = 1px)
hdpi: 屏幕密度為240的手機設備
xhdpi: 屏幕密度為320的手機設備
xxhdpi:屏幕密度為480的手機設備
目前android默認的low=120 ;Medium =160; High = 240
2.度量單位含義
dip: device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬體有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。
dp: dip是一樣的
px: pixels(像素). 不同設備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較多。
pt: point,是一個標準的長度單位,1pt=1/72英寸,用於印刷業,非常簡單易用;
sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize。
in(英寸):長度單位。
mm(毫米):長度單位。

8. Android中解析度,DPI,DP與PX對應關系

解析度就是手機屏幕的像素點數。一般為屏幕的「寬×高」,例如解析度有720×1280的手機設備,表示此屏幕在寬度方向有720個像素點,在高度方向有1280個像素點。

按屏幕對角測量的實際物理尺寸。為簡便起見,Android 將所有實際屏幕尺寸分組為四種通用尺寸:小、 正常、大和超大,以英寸(inch)為單位。例如有個5寸的手機設備,是指對角線的尺寸,5寸×2.54厘米/寸=12.7厘米。

就是每英寸的像素點數,數值越高當然顯示越清晰,通常 與「正常」或「高」密度屏幕相比,「低」密度屏幕在給定物理區域的像素較少。

在定義 UI 布局時應使用的虛擬像素單位,用於以密度無關方式表示布局維度 或位置。
密度無關像素等於 160 dpi 屏幕上的一個物理像素,這是 系統為「中」密度屏幕假設的基線密度。在運行時,系統 根據使用中屏幕的實際密度按需要以透明方式處理 dp 單位的任何縮放 。dp 單位轉換為屏幕像素很簡單: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等於 1.5 物理像素。在定義應用的 UI 時應始終使用 dp 單位 ,以確保在不同密度的屏幕上正常顯示 UI。

大多數情況下,確保應用中的屏幕獨立性很簡單,只需以適當的密度獨立像素( dp 單位)或 "wrap_content" 指定所有 布局尺寸值。系統然後根據適用於當前屏幕密度的縮放比例適當地縮放點陣圖可繪制對象,以 適當的大小顯示。

如上表所示,現在我們在mdpi下設計了一個48x48的應用圖標,那麼在ldip下大小縮小0.75倍為36x36,在hdip下放大1.5倍為72x72,在xhdpi下放大2倍為96x96,在xxhdpi下放大3倍為144x144,在xxxhdpi下放大4倍為192x192.

android對於不同dpi設備提供了5個目錄存放圖片,使開發人員根據實際需要對圖片適配。一般情況需要UI根據一種DPI密度、或解析度的設備設計UI,根據不同dpi的比例出圖,一般需要xhdpi、xxhdpi兩套圖,即2x、3x圖。
計算相關公式:
px = dpValue * density + 0.5f;
dp = pxValue / density + 0.5f;

9. Android屏幕配適、版本配適與多語言支持

目前主流的屏幕密度:240dpi (480 * 800px) , 320dpi (720*1280px) , 480dpi(1080*1920px)現在新出的手機幾乎全是全高清屏(1080*1920px)

Android圖片資源目錄

mdpi [1倍]160dpi

hdpi [1.5倍]   240dpi

xhdpi [2倍]   320dpi

xxhdpi [3倍] 480dpi

xxxhdpi [4倍] 640dpi

因此對其他圖片資源的建議是:

a.一般採用720 * 1280的屏幕尺寸設計,這樣切圖可以直接適配720 * 1280的機型。

b.720 * 1280下切的圖基本可以適配大部分機型。

d.適配480 * 800的機型,只需要把切圖 * 0.75。

e.適配1080 * 1920 的機型,只需要把切圖 * 1.50即可。

a.以720 * 1280作為設計標准,畫布大小定位720 * 1280 (以後1080*1920px做標准亦可,類推)

b.只使用偶數單位的尺寸

c.盡量只使用 24pt, 28pt , 32pt, 44pt大小的字體

d.設計完成之後,所有尺寸的px值除以2作為dp數據交給開發人員

e.三份切圖,分別是:xhdpi,hdpi,mdpi的資源,如果要切一份就使用xhdpi

柵格系統的最小單位是8dp,一切距離、尺寸都應該是8dp的整數倍,所有可操作元素最小點擊區域尺寸為48dp X 48dp。以下是一些常見的尺寸與距離:

有時候在自定義view,draw的時候單位往往是px,要做一個dpi的轉換,需要通過該類獲取屏幕的信息,如:屏幕密度,寬高等。

a.盡量使用線性布局(LinearLayout)和相對布局(RelateLayout),盡量不使用絕對布局(AbsoluteLayout)和幀布局(FrameLayout)。

b.盡量使用wrap_content、mach_parent讓view自適應或最大化,盡量不要寫寬高的值。

c.使用線下布局的百分比weight權重時,要把能伸縮方向的寬度寫成「0dp「,如果寫成wrap_coent會使布局效果不佳等問題。

d.盡量使用android的Shape自定義view背景,這樣會隨之自適應。

e.ImageView的ScaleType有幾種方式:matrix(默認)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY;盡量使用fitCenter按比例擴大至view寬度,能取得較好適配和顯示效果。(更多請參考: Android中的ImageView配適 )

f.獲取屏幕解析度信息,進行動態適配。(參考第三大點)

a.把屏幕設置成單一的橫屏或豎屏:

b.根據橫豎屏載入不同布局(android: screenOrientation="sensor")

通過this.getResources().getConfiguration().orientation來判斷當前是橫屏還是豎屏,然後在onCreate方法中載入不同的布局

採用第二種方式要注意的有兩點

布局問題:

需要在res目錄先建立layout-land和layout-port目錄相應的xml文件名字相同,然後在兩個文件夾下創建相同名字的兩套xml,系統就會根據不同的屏幕來進行自動尋找。

切換時activity的生命周期:

activity生命周期在切換橫豎屏會有一些有趣的變化

a.不設置activity的android:configChanges時,切換橫屏,activity的生命周期會重新調用一次,但是切換豎屏時,生命周期會重新調用兩次。

b.當設置activity的android:configChanges=「orientation」時,切換橫豎屏都會重新調用各生命周期一次。

c.當設置activity的android:configChanges=「orientation|keyboardHidden」(大於api13時,需要設為「orientation|screenSize」)時,切換橫豎屏不會重新調用各生命周期,只會調用onConfigurationChanged方法。

一般設為b或者c

平板應用的特性:

對於大屏幕的平板8英寸以上(參考ipad mini,現在很多高端手機都是5-6英寸了,8英寸以上視為平板吧),基與平板應用的特性,平板應用開發一般採取如下兩種策略

1)兼容模式

採用單activity(或者盡量少activity)+多fragment的結構開發應用,在layout資源文件中創建三套布局:手機布局、平板橫屏布局、平板豎屏布局。

優點:

        只需要維護一個app

缺點:

        設計及實現的難度變大,更復雜,有時候需要採取折衷方案

        手機apk上由於含有平板的大解析度圖片資源(設計上可以減少內置資源)

2)開發另一套只適配平板的app

優點:

        與手機app分離獨立。不會因為要兼容而採用一些折衷方案,影響其性能、內存

        設計和實現更加自由

缺點:

        需要維護兩套app

目前谷歌推薦第一種方案,但是國內很多應用是採取第二種方案。

可以通過判斷sdk的版本(Build.VERSION.SDK_INT),來為能夠使用的版本進行個性化設置

例如:沉浸式狀態欄配適

在Android系統4.4以前,狀態欄的背景色和字體顏色都是不能改變的。但是4.4以後Google增加了改變狀態欄背景透明的方法。可以通過判斷sdk的版本,來為能夠使用的版本進行個性化設置:

沉浸式狀態欄是Android在5.0中引入的,在5.0之前是沒有的,並且在Android6.0中沉浸式狀態欄的使用方法和5.0不一樣,因此需要做到版本兼容,針對於不同的Android進行適配,同樣也是通過判斷Build.VERSION.SDK_INT來區分版本,進行個性化配適

沉浸式狀態欄的實現方式有好幾種,更多請參考 沉浸式狀態欄的實現

原則:內置圖片資源不應該出現文字(如果出現文字需要具備)、所有的文字需要放在res資源目錄特定語言目錄下。

10. Android中手機屏幕密度該怎麼計算

為解決Android設備碎片化,引入一個概念density,也就是密度.它指的是在一定尺寸的物理屏幕上顯示像素的數量,一般使用dpi(dots per inch,每英寸像素數)作為單 位.比如設備解析度為240x320,屏幕物理尺寸為1.5英寸x2英寸(對角線為2.5)它的密度可以用解析度/尺寸表示:240/1.5或者即320/2,密度為160dpi。算對角線也是一樣 的,長的平方+寬的平方=160000,開方後=400.可知400/2.5=160.對於用戶來說,密度越大的屏幕顯示效果越精細,因為每英寸顯示的像素數量更多。 以上的描述就是一個藍本(此藍本對應於mdpi). 按照此藍本一個dp相當於160dpi屏幕中的一個px.同理在,在320dpi的屏幕中,一個dp相當於2個px. 通過這樣的成比例放縮,Android解決了需要多個不同屏幕中的大小顯示問題. 所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480x800)為例,可以看見其為sw320dp,h533dp. 即寬有320dp,高為533dp. 是怎麼計算出來的呢? 將(480的平方+800的平方)開方=932.9523031 然後932.9523031/屏幕尺寸3.7=252.14927,此結果為此手機的屏幕密度. 然後按照上面的藍本,就應該要計算在該手機上1dp對於多少px.計算如下: 160 1dp=1px 252.14927 1dp=?px 結果為: 252.14927/160=1.5759329 注意: 在此一般不取1.5759329,只取到1.5即可. 所以:480/1.5=320;800/1.5=533.3333(通常取為533),即上述的sw320dp,h533dp. 手機屏幕密度的對應關系 120上下浮動的都屬於ldpi 160上下浮動的都屬於mdpi 240上下浮動的都屬於hdpi 320上下浮動的都屬於xdpi 以摩托羅拉ME525+(3.7英寸 解析度854x480像素)為例: 將(480的平方+854的平方)開方=979.6509 然後979.6509/屏幕尺寸3.7=264.770529,此結果為此手機的屏幕密度.對應為hdpi 264.770529/160=1.6548 即在此手機中1dp=1.6548個像素,只取到1.6即可 所以:480/1.6=300;854/1.6=533.75(通常取為533) 按照這個邏輯,算出來的寬應該是只有300dp.悲劇的是,如果某個控制項的寬為300,在此手機上是不能鋪滿手機的寬的. 也就是說除以的不是1.6而還是1.5!!!!所以將寬設置為320即可 總結:在hdpi中,像素轉換為dp統一用的是:像素/1.5 以聯想K860(5.0英寸,解析度1280x720像素)為例: 將(1280的平方+720的平方)開方=1468.60478 然後1468.60478/屏幕尺寸5=293.720,此結果為此手機的屏幕密度.對應為xdpi 293.720/160=1.8357 即在此手機中1dp=1.8357個像素 所以:1280/1.8357=697.281;720/1.8357=392.22 按照這個邏輯,算出來的寬應該是392.22.悲劇的是,如果某個控制項的寬為392.22,在此手機上是顯示不完全的. 也就是說除以的不是1.8而是2!!!!所以將寬設置為360即可 總結:在xdpi中,像素轉換為dp統一用的是:像素/2 注意問題1: 在建立模擬器的時候注意 854x480在Hardware中,應該將Abstracted LCD density設置為240,並手動輸入解析度 1280x720在Hardware中,應該將Abstracted LCD density設置為320,並手動輸入解析度 注意問題2: 多個layout文件夾在命名上有相應規則,以解析度480x854為例,需要建立480x854像素的layout文件夾,命名:layout-854x480,有兩點需要注意:①大數(854)必須在前, 否則會報錯;②兩個數字之間的符號是小寫英文字母“x”,不是乘號

熱點內容
定義dns伺服器的ip 發布:2025-05-17 20:32:37 瀏覽:952
android判斷圖片 發布:2025-05-17 20:32:33 瀏覽:832
安卓12什麼時候適配小米 發布:2025-05-17 20:31:47 瀏覽:69
c語言字元串初始化 發布:2025-05-17 20:18:43 瀏覽:36
安卓融e聯推送需要什麼許可權 發布:2025-05-17 20:18:39 瀏覽:268
我的世界無限武魂伺服器 發布:2025-05-17 20:17:09 瀏覽:371
安卓手游腳本語言 發布:2025-05-17 19:53:07 瀏覽:21
找圈演算法 發布:2025-05-17 19:49:19 瀏覽:410
資料庫的存取方法 發布:2025-05-17 19:48:36 瀏覽:125
androidapp測試 發布:2025-05-17 19:48:19 瀏覽:389