簡(jiǎn)單談?wù)凙ndroid中SP與DP的區(qū)別
從一開(kāi)始寫Android程序,就被告知這些常識(shí)
一、dp(或者dip device independent pixels)
一種基于屏幕密度的抽象單位。在每英寸160點(diǎn)的顯示器上,1dp=1px。不同設(shè)備有不同的顯示效果,這個(gè)和設(shè)備硬件有關(guān)。
二、sp(Scaled Pixels)
主要用于字體顯示,與刻度無(wú)關(guān)的一種像素,與dp類似,但是可以根據(jù)用戶的字體大小首選項(xiàng)進(jìn)行縮放。
簡(jiǎn)單的說(shuō)
- 長(zhǎng)度寬度的數(shù)值要使用dp作為單位放入dimens.xml文件中
- 字體大小的數(shù)值要使用sp作為單位,也放入dimens.xml文件中
然后,就沒(méi)有然后了,仿佛潛臺(tái)詞就是說(shuō),你記住去用就行了.
偶然有一天,當(dāng)我們陰差陽(yáng)錯(cuò)地將字體寫成了dp,也是可以工作,而且效果和sp一樣.
這時(shí)候,就開(kāi)始懷疑了,到底有啥區(qū)別呢,dp和sp有什么不同呢?
我們做個(gè)簡(jiǎn)單的Sample驗(yàn)證一下,如下,一個(gè)布局代碼
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:text="Hello World! in SP" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18dp" android:text="Hello World! in DP" />
得到的效果是這個(gè)樣子
但是,當(dāng)我們進(jìn)入系統(tǒng)設(shè)置中修改字體大小時(shí)
再次進(jìn)入之前的界面,發(fā)現(xiàn)了一些不一樣的東西.
由此看來(lái)
- 使用sp作為字體大小單位,會(huì)隨著系統(tǒng)的字體大小改變
- 而dp作為單位則不會(huì).
關(guān)于sp, 文檔 的描述為:
Scale-independent Pixels – This is like the dp unit, but it is also scaled by the user's font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and the user's preference.
大致意思為
- sp除了受屏幕密度影響外,還受到用戶的字體大小影響
- 通常情況下,建議使用sp來(lái)跟隨用戶字體大小設(shè)置
因此通常情況下,我們還是建議使用sp作為字體的單位,除非一些特殊的情況,不想跟隨系統(tǒng)字體變化的,可以使用dp.
- 解析android中的dip,dp,px,sp和屏幕密度
- Android中dip、dp、sp、pt和px的區(qū)別詳解
- Android編程實(shí)現(xiàn)使用SoundPool播放音樂(lè)的方法
- Android持久化技術(shù)之SharedPreferences存儲(chǔ)實(shí)例詳解
- 加載頁(yè)面遮擋耗時(shí)操作任務(wù)頁(yè)面--第三方開(kāi)源之AndroidProgressLayout
- Android編程實(shí)現(xiàn)基于局域網(wǎng)udp廣播自動(dòng)建立socket連接的方法
- Android編程之SharedPreferences文件存儲(chǔ)操作實(shí)例分析
- android開(kāi)發(fā)socket編程之udp發(fā)送實(shí)例分析
- Android 中SP與DP的區(qū)別實(shí)例詳解
相關(guān)文章
Android滑動(dòng)拼圖驗(yàn)證碼控件使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android滑動(dòng)拼圖驗(yàn)證碼控件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08快速了解Android?Room使用細(xì)則進(jìn)階
這篇文章主要為大家介紹了快速了解Android?Room使用細(xì)則進(jìn)階,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android開(kāi)發(fā)中父組件調(diào)用子組件方法demo
這篇文章主要為大家介紹了Android開(kāi)發(fā)中父組件調(diào)用子組件方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Android編程實(shí)現(xiàn)使用handler在子線程中更新UI示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)使用handler在子線程中更新UI,涉及Android線程與界面布局相關(guān)操作技巧,需要的朋友可以參考下2017-09-09android 關(guān)于webview 加載h5網(wǎng)頁(yè)開(kāi)啟定位的方法
今天小編就為大家分享一篇android 關(guān)于webview 加載h5網(wǎng)頁(yè)開(kāi)啟定位的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07AndroidStudio Gradle基于友盟的多渠道打包方法
這篇文章主要介紹了AndroidStudio Gradle基于友盟的多渠道打包方法,需要的朋友可以參考下2017-09-09Android編程心得分享——JSON學(xué)習(xí)過(guò)程
在我們初步學(xué)習(xí)JSON時(shí)我們都知道JSON作為現(xiàn)在比較流行的數(shù)據(jù)交換格式,有著它的許多優(yōu)點(diǎn),這里將我學(xué)習(xí)JSON的過(guò)程記錄如下2013-06-06