日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android多屏幕适配之字体大小、行间距和字间距

發(fā)布時(shí)間:2024/3/13 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android多屏幕适配之字体大小、行间距和字间距 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

code小生,一個(gè)專注Android領(lǐng)域的技術(shù)平臺(tái)

作者:星際旅行android
地址:https://www.jianshu.com/p/730d0b2c1c5d
聲明:本文已獲星際旅行android授權(quán),轉(zhuǎn)發(fā)等請(qǐng)聯(lián)系原作者授權(quán)


今天要說(shuō)的是屏幕適配字體這塊,為什么要選這么個(gè)主題呢,大家都知道Android機(jī)型眾多,不同的手機(jī)屏幕分辨率也是千差萬(wàn)別,屏幕適配這塊一直是個(gè)令人頭疼的問(wèn)題,不像iOS就只有一家。而字體適配又是這其中重要的一環(huán),為什么要挑字體單獨(dú)拿出來(lái)說(shuō)呢,是因?yàn)楸救私裉煸诤凸綰I對(duì)設(shè)計(jì)效果圖的時(shí)候,發(fā)現(xiàn)怎么都難以溝通,索性寫出來(lái)做個(gè)總結(jié),讓別人理解你之前,首先得自己整明白。

首先我遇到的第一個(gè)問(wèn)題就是:
UI始終堅(jiān)持認(rèn)為app字體大小應(yīng)該是固定的,即不同大小屏幕的手機(jī),看到的字體是一樣一樣的。

這乍看起來(lái)似乎沒(méi)毛病,就像iPhone那樣,不同iPhone型號(hào)手機(jī)里面的APP字體大小顯示是一樣的。為什么會(huì)這樣呢,iOS App開(kāi)發(fā)中字體以磅(pt)為單位的,它們的轉(zhuǎn)換關(guān)系為:pt = (px / 96) * 72,按照這樣的一個(gè)公式,比如給定字體大小7.5磅(pt) ,按照公式得到 (7.5/72)96=10px(像素),這樣不論是什么樣分辨率的iPhone最終顯示的都是一個(gè)固定的10px(像素)值。

而Android呢,按照上面iPhone的方式咱能不能直接拿來(lái)用呢,我們先去看一下谷歌官方文檔怎么寫的。

咦,瞧這谷歌文檔寫的,看來(lái)咱想直接生搬硬套iPhone是沒(méi)指望了。官方文檔可說(shuō)了指定尺寸時(shí),使用dp或sp單位,這里我們暫時(shí)不深究dp與sp之間的具體區(qū)別,咱先去瞧瞧市面上大廠的APP都是怎么處理的。

首先我們就去看下常用的qq,打開(kāi)應(yīng)用市場(chǎng),搜索qq,

下載最新版的qq

下載完成后得到qq安裝包,接著開(kāi)始進(jìn)行反編譯,這里我們使用的是apktool,

之后打開(kāi)qq安裝包目錄,會(huì)發(fā)現(xiàn)此時(shí)安裝包目錄下存在一個(gè)和qq同名的目錄文件夾,點(diǎn)擊進(jìn)去發(fā)現(xiàn)里面有個(gè)res目錄的文件夾,這個(gè)就是我們想要的資源文件。

這時(shí)我們打開(kāi)Android studio 新建個(gè)工程,我們將反編譯得到的res文件夾全部拷貝進(jìn)新建的工程中,打開(kāi)其中的一個(gè)布局文件,

可以看到里面的字體大小用的是sp,我們以同樣的方式再去看看微信

發(fā)現(xiàn)字體大小用的是dp,接著再去看下簡(jiǎn)書

可以看到也是sp,最后我們?cè)偃タ聪?strong style="font-size:inherit;line-height:inherit;color:rgb(233,105,0);">新浪微博

同樣還是sp,總結(jié)下就是微信字體大小用的是dp,qq、新浪微博和簡(jiǎn)書用的都是sp,說(shuō)到這那么問(wèn)題來(lái)了,這個(gè)sp 和dp到底有啥區(qū)別呢?

由于過(guò)去通常以像素為單位設(shè)計(jì)計(jì)算機(jī)用戶界面。當(dāng)一個(gè)像素在80x80的時(shí)候,在高分辨率顯示器上運(yùn)行該程序,則用戶界面會(huì)顯得很小。所以采用與分辨率無(wú)關(guān)的度量單位來(lái)開(kāi)發(fā)程序就能夠解決這個(gè)問(wèn)題。而Android應(yīng)用開(kāi)發(fā)支持不同的度量單位。dp: device independent pixels(設(shè)備獨(dú)立像素). 不同設(shè)備有不同的顯示效果,這個(gè)和設(shè)備硬件有關(guān),一般我們?yōu)榱酥С?WVGA、HVGA和QVGA 推薦使用這個(gè),不依賴像素。dp與px之間的換算公式:px = dp * (dpi / 160), dpi是Dots Per Inch(每英寸所打印的點(diǎn)數(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。

也就是說(shuō),當(dāng)我們?cè)O(shè)置字體大小為10dp,dpi為320的xhdpi的Android機(jī),通過(guò)換算公式:px=10*(320/160),最終得到20px(像素)大小,如果是dpi為480的xxhdpi的Android機(jī),通過(guò)公式得到30px(像素)大小。

而sp: scaled pixels(放大像素). 主要用于字體顯示best for textsize. 這兩個(gè)單位作用于字體大小本質(zhì)上沒(méi)啥區(qū)別,唯一的區(qū)別就是:當(dāng)修改系統(tǒng)字體大小時(shí),字體大小以dp為單位時(shí),大小不變;而字體大小以sp為單位時(shí),大小會(huì)跟隨變化;

也就是說(shuō)只有當(dāng)我們進(jìn)入到手機(jī)設(shè)置界面,手動(dòng)去設(shè)置系統(tǒng)字體大小時(shí),以sp為單位的字體會(huì)跟隨系統(tǒng)設(shè)置而做出變化,而dp則不會(huì),其他情況下是一樣的。總結(jié)下就是,無(wú)論是用dp還是sp作為字體大小的單位,最終都是根據(jù)手機(jī)dpi來(lái)決定最終顯示到屏幕上的像素大小。

第二個(gè)遇到的問(wèn)題就是:
字體行間距和字間距很難調(diào)合適
Android 中設(shè)置行間距有兩個(gè)方法,其中 android:lineSpacingExtra 表示額外的行間距數(shù)值,單位通常為 dp。如 android:lineSpacingExtra=”1dp”。

android:lineSpacingExtra 的值可以為負(fù)數(shù),小數(shù)和0。如果值為正數(shù)表示增加行間距,如果值為負(fù)數(shù)表示減少行間距,如果值為0,則沒(méi)有變化。

另一個(gè) android:lineSpacingMultiplier 表示行間距的倍數(shù),沒(méi)有單位。如android:lineSpacingMultiplier=”1.2”。

android:lineSpacingMultiplier 的值可以為任意浮點(diǎn)數(shù)。如果值大于1.0表示增加行間距,如果值小于1.0表示減少行間距。

設(shè)置字間距的方法為 setLetterSpacing,

這里我們直接跟進(jìn)源碼,看注釋的內(nèi)容簡(jiǎn)單的翻譯過(guò)來(lái)就是:正值擴(kuò)大,負(fù)值將會(huì)使文本壓縮,這里我們看一下微博的文本是怎么設(shè)置的

我們可以看到微博這里只設(shè)置了一個(gè)行間距3dp。接著我們?cè)偃タ戳硪患液?jiǎn)書

發(fā)現(xiàn)只有個(gè)行間距 2dp,其他的微信,qq 基本顯示的都是單行文本,行間距字間距都是默認(rèn)的。總結(jié)下就是兩派要么參照 qq,微信采用默認(rèn),要么參照微博或簡(jiǎn)書設(shè)置個(gè)行間距 2 或 3dp。OK,問(wèn)題搞定,洗洗睡覺(jué)~。

適配

RecyclerView點(diǎn)擊item圖片,從點(diǎn)擊位置,放大到全屏,再次點(diǎn)擊關(guān)閉

Android install apk 兼容至 Android 8

分享技術(shù)我是認(rèn)真的

總結(jié)

以上是生活随笔為你收集整理的Android多屏幕适配之字体大小、行间距和字间距的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。