最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中的常用尺寸單位(dp、sp)快速入門(mén)教程

 更新時(shí)間:2017年05月07日 09:08:51   作者:absfree  
本文詳細(xì)介紹了Android開(kāi)發(fā)中常用尺寸單位的含義,重點(diǎn)講解了sp與dp這兩個(gè)尺寸單位的本質(zhì)以及它們與px的換算公式,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

常見(jiàn)尺寸單位

Android開(kāi)發(fā)中的常用尺寸單位有如下幾種:

  • dp (dip)
  • px
  • pt
  • inch
  • sp

算不知道確切含義,相信對(duì)于以上這幾種尺寸單位大家也都比較臉熟,這里先讓我們重新認(rèn)識(shí)一下它們:

  • dp (dip): 即設(shè)備無(wú)關(guān)像素(device independent pixels),這種尺寸單位在不同設(shè)備上的物理大小相同。
  • px:即像素(pixel),這個(gè)不用多說(shuō)。
  • pt:通常用來(lái)作為字體的尺寸單位,1 pt相當(dāng)于1/72英寸。
  • inch:英寸,1 英寸約等于2.54厘米,主要用來(lái)描述手機(jī)屏幕的大小。
  • sp:大部分人只知道它通常用作字體的尺寸單位,實(shí)際大小還與具體設(shè)備上的用戶(hù)設(shè)定有關(guān)。(如果你對(duì)"sp"的了解停留于此,那么看完這篇文章后你會(huì)更透徹的理解它^ _ ^)

在上面幾種常見(jiàn)的尺寸單位,dp和sp可以看做是虛擬尺寸。其中dp是與設(shè)備無(wú)關(guān)的虛擬像素單位,開(kāi)發(fā)者為UI控件指定以dp為單位的大小后,在不同屏幕密度的Android設(shè)備上便能夠具有相同的物理尺寸。dp的出現(xiàn)讓開(kāi)發(fā)者無(wú)需關(guān)注屏幕密度、物理像素之間的換算關(guān)系。sp則與dp相似,但它主要用作字體的尺寸單位,與dp的區(qū)別是:Android系統(tǒng)支持用戶(hù)設(shè)定字體大小,因而sp的實(shí)際大小還會(huì)根據(jù)用戶(hù)設(shè)定在原基礎(chǔ)上進(jìn)行縮放。

下面來(lái)詳細(xì)介紹dp與sp這兩種尺寸單位。

尺寸單位詳解之dp

dp的全稱(chēng)是device independent pixels,在具有不同屏幕密度的設(shè)備上,1 dp的物理大小是相同的。那么,什么是屏幕密度呢?

屏幕密度

手機(jī)的屏幕密度通常指的是手機(jī)屏幕的dpi(dots per inch),也就是每英寸的像素?cái)?shù)。對(duì)于Android手機(jī)來(lái)說(shuō),常見(jiàn)的dpi有如下幾種:

  • ldpi:對(duì)應(yīng)的dpi范圍為0 ~ 120,也就是說(shuō)每英寸有0到120個(gè)像素點(diǎn)的屏幕的屏幕密度都屬于ldpi
  • mdpi:dpi范圍為120 ~ 160
  • hdpi:dpi范圍為160 ~ 240
  • xhdpi:dpi范圍為240~320
  • xxhdpi:dpi范圍為320~480

在實(shí)際開(kāi)發(fā)中,通常以dpi值120、160、240、320、480分別指代ldpi、mdpi、hdpi、xhdpi、xxhdpi。通常屏幕密度越大的手機(jī)顯示的圖像會(huì)越細(xì)膩??梢酝ㄟ^(guò)如下代碼獲取當(dāng)前Android設(shè)備的屏幕密度:

private void getDpi() {
 DisplayMetrics dm = getResources().getDisplayMetrics();
 Log.i("TAG", "density = " + dm.density);
 Log.i("TAG", "densityDpi = " + dm.densityDpi);
}

若我們?cè)谝慌_(tái)屏幕密度為320dpi的Android手機(jī)上運(yùn)行以上代碼,會(huì)得到如下輸出:

density = 2
densityDpi = 320

上面輸出中的densityDpi就是Android手機(jī)屏幕的dpi值,那么density是什么呢?實(shí)際上它代表的是當(dāng)前屏幕的dpi值與基準(zhǔn)dpi值的比值,這個(gè)基準(zhǔn)dpi值為160。
現(xiàn)在我們已經(jīng)理解了dpi,接下來(lái)讓我們揭開(kāi)dp的神秘面紗。

dp

上面我們提到了選擇dpi值160作為基準(zhǔn)屏幕密度,這個(gè)基準(zhǔn)屏幕密度人為建立起了dp與px間的關(guān)系:在dpi為160的Android設(shè)備上,1 dp = 1px。假設(shè)x為某UI控件以px為單位的大小,y為同一UI控件以dp為單位的大小,densityDpi表示屏幕密度,則x與y的關(guān)系為:x = y * densityDpi / 160。

介紹完了dp,接下來(lái)讓我們探究一下sp這個(gè)尺寸單位的真面目。

尺寸單位詳解之sp

在介紹sp之前,我們先來(lái)一起看下TypedValue類(lèi)中包含的一個(gè)用戶(hù)將dp、sp等單位轉(zhuǎn)換為px的靜態(tài)方法:

 public static float applyDimension(int unit, float value,DisplayMetrics metrics) {
  switch (unit) {
  case COMPLEX_UNIT_PX:
   return value;
  case COMPLEX_UNIT_DIP:
   return value * metrics.density;
  case COMPLEX_UNIT_SP:
   return value * metrics.scaledDensity;
  case COMPLEX_UNIT_PT:
   return value * metrics.xdpi * (1.0f/72);
  case COMPLEX_UNIT_IN:
   return value * metrics.xdpi;
  case COMPLEX_UNIT_MM:
   return value * metrics.xdpi * (1.0f/25.4f);
  }
  return 0;
 }

若要將dp轉(zhuǎn)換為px,會(huì)執(zhí)行如下代碼:

return value * metrics.density;

density我們?cè)谇懊娼榻B過(guò),指的是當(dāng)前dpi與基準(zhǔn)dpi(160)的比值。density的計(jì)算方式就是當(dāng)前屏幕的dpi除以160。也就是說(shuō),在屏幕的dpi為120、160、320、480時(shí),density的值分別為0.75、1、2、3。
若要將sp轉(zhuǎn)換為px,則會(huì)執(zhí)行如下代碼:

return value * metrics.scaledDensity;

可以看到,sp轉(zhuǎn)換為px的計(jì)算公式與dp轉(zhuǎn)換為px時(shí)相似,那么scaledDensity是什么呢?實(shí)際上,scaledDensity不同于density,scaledDensity是可以動(dòng)態(tài)改變的,當(dāng)用戶(hù)改變了Android設(shè)備的字體縮放比例時(shí),scaledDensity的值就會(huì)發(fā)生變化。scaledDensity的計(jì)算公式為:scaledDensity = density * fontScale。其中fontScale代表用戶(hù)設(shè)定的Android設(shè)備字體縮放比例,默認(rèn)為1。也就是說(shuō),當(dāng)用戶(hù)沒(méi)有改變Android設(shè)備的字體縮放比例時(shí),sp、dp與px的換算是相同的。

多分辨率之殤

市面上存在著的各種不同分辨率的Android設(shè)備為廣大Android開(kāi)發(fā)者挖了眾多的坑,比如:

  • 需要為不同分辨率的Android設(shè)備單獨(dú)維護(hù)一套dimens文件;
  • 通常UI設(shè)計(jì)師只會(huì)針對(duì)某種特定分辨率的設(shè)備為我們標(biāo)注UI控件的像素大小,相信不少小伙伴都受夠了手動(dòng)換算不同分辨率設(shè)備上UI控件像素大小的痛苦;
  • 通常我們需要為每種分辨率的Android設(shè)備維護(hù)一個(gè)drawable文件夾以獲得比較好的圖片顯示效果,這會(huì)導(dǎo)致apk文件尺寸的臃腫;而且若某個(gè)drawable文件夾下的圖片需要修改,那么就需要替換其他所有drawable文件夾中對(duì)應(yīng)的圖片。如果不小心漏掉了某個(gè)drawable文件夾下的圖片,則會(huì)導(dǎo)致該圖片在某些分辨率的手機(jī)上失真。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android 自定義組件成JAR包的實(shí)現(xiàn)方法

    Android 自定義組件成JAR包的實(shí)現(xiàn)方法

    這篇文章主要介紹了Android 自定義組件成JAR包的實(shí)現(xiàn)方法的相關(guān)資料,偶爾會(huì)用到這樣的功能,如果你自己自定義的組件很好,需要的朋友可以參考下
    2016-11-11
  • Android 深入探究自定義view之流式布局FlowLayout的使用

    Android 深入探究自定義view之流式布局FlowLayout的使用

    FlowLayout(int align, int hgap, int vgap)創(chuàng)建一個(gè)新的流布局管理器,它具有指定的對(duì)齊方式以及指定的水平和垂直間隙,意思就是說(shuō)從左上角開(kāi)始添加原件,依次往后排,第一行擠滿了就換一行接著排
    2021-11-11
  • Android?廣播接收器BroadcastReceiver詳解

    Android?廣播接收器BroadcastReceiver詳解

    Android開(kāi)發(fā)的四大組件分別是:活動(dòng)(activity),用于表現(xiàn)功能;服務(wù)(service),后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn);廣播接受者(Broadcast Receive),勇于接收廣播;內(nèi)容提供者(Content Provider),支持多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù),本篇著重介紹廣播組件
    2022-07-07
  • Android實(shí)現(xiàn)動(dòng)態(tài)定值范圍效果的控件

    Android實(shí)現(xiàn)動(dòng)態(tài)定值范圍效果的控件

    這篇文中給大家分享一個(gè)Android的控件,這個(gè)控件實(shí)現(xiàn)是一個(gè)可以動(dòng)態(tài)選擇定值范圍的效果,實(shí)現(xiàn)后的效果很不錯(cuò),對(duì)大家日常開(kāi)發(fā)或許有所幫助,感興趣的朋友們可以一起來(lái)看看。
    2016-09-09
  • 在Android中調(diào)用WebService實(shí)例

    在Android中調(diào)用WebService實(shí)例

    這篇文章主要介紹了在Android中調(diào)用WebService實(shí)例,有需要的朋友可以了解一下。
    2016-11-11
  • Android設(shè)置Padding和Margin(動(dòng)態(tài)/靜態(tài))的方法實(shí)例

    Android設(shè)置Padding和Margin(動(dòng)態(tài)/靜態(tài))的方法實(shí)例

    如何在java代碼中設(shè)置margin,也就是組件與組件之間的間距,下面這篇文章主要給大家介紹了關(guān)于Android設(shè)置Padding和Margin(動(dòng)態(tài)/靜態(tài))的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 淺談Android Studio 解析XML的三種方法

    淺談Android Studio 解析XML的三種方法

    這篇文章主要介紹了淺談Android Studio 解析XML的三種方法,Android Studio 解析XML常見(jiàn)的三種方式:DOM PULL SAX,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Android 實(shí)現(xiàn)雙擊退出的功能

    Android 實(shí)現(xiàn)雙擊退出的功能

    本文主要介紹Android 實(shí)現(xiàn)雙擊退出,這里給大家提供代碼示例,方便大家理解查看,有需要的小伙伴可以參考下
    2016-07-07
  • android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法

    android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法

    本篇文章主要介紹了android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法,詳解的介紹了幾種實(shí)現(xiàn)咻一咻的思路和方法,有需要的可以了解一下。
    2016-11-11
  • 百度地圖實(shí)現(xiàn)小車(chē)規(guī)劃路線后平滑移動(dòng)功能

    百度地圖實(shí)現(xiàn)小車(chē)規(guī)劃路線后平滑移動(dòng)功能

    這篇文章主要介紹了百度地圖實(shí)現(xiàn)小車(chē)規(guī)劃路線后平滑移動(dòng)功能,本文是小編寫(xiě)的一個(gè)demo,通過(guò)效果圖展示的非常直白,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

永昌县| 阿克苏市| 德化县| 宜阳县| 富民县| 江西省| 固镇县| 新河县| 巨野县| 民勤县| 仙游县| 鹤庆县| 河曲县| 红原县| 射洪县| 紫云| 南昌市| 吉安市| 敦煌市| 大同县| 桐庐县| 瑞安市| 阿拉善左旗| 洛阳市| 庆云县| 广昌县| 镇沅| 鸡泽县| 同德县| 沧源| 通城县| 韶山市| 嘉禾县| 蒲江县| 资中县| 尖扎县| 汪清县| 广安市| 登封市| 永宁县| 大兴区|