www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]我所在公司的產(chǎn)品以硬件為主,軟件跟著特定的硬件平臺(tái)走,所以,雖然從事著Android開(kāi)發(fā),卻從來(lái)沒(méi)有處理過(guò)多屏幕適配的問(wèn)題。意識(shí)到這個(gè)可能成為自己的一個(gè)短板,所以在缺乏實(shí)踐的情況下,先準(zhǔn)備點(diǎn)理論知識(shí),

我所在公司的產(chǎn)品以硬件為主,軟件跟著特定的硬件平臺(tái)走,所以,雖然從事著Android開(kāi)發(fā),卻從來(lái)沒(méi)有處理過(guò)多屏幕適配的問(wèn)題。意識(shí)到這個(gè)可能成為自己的一個(gè)短板,所以在缺乏實(shí)踐的情況下,先準(zhǔn)備點(diǎn)理論知識(shí),聊以慰藉。
? ? ?1 常用單位 ? ? ? px:pixel //像素 ? ? ? in: inch //英寸 ? ? ? mm : 毫米 ? ? ? pt : 1/72英寸 ? ? ? dpi : dots peer inch //一英寸長(zhǎng)的直線上的像素點(diǎn)的數(shù)量,即像素的密度 ? ? ? dp(dip) : Density-independent pixel //密度無(wú)關(guān)像素,定義為160dpi的屏幕下,1個(gè)像素點(diǎn)的長(zhǎng)度 ? ? ? sp :?Scale-independent Pixels //專用于設(shè)定文字大小,和dp類似,但是它除了受到dpi影響,還受到用戶的字體偏好設(shè)定影響 ? ? ? 屏幕的物理尺寸:屏幕對(duì)角線的長(zhǎng)度,以inch為單位 ? ? ? 分辨率: 屏幕上長(zhǎng)寬方向上像素點(diǎn)的數(shù)量, 例A80為全高清屏,即1080*1920的分辨率// 也稱為相對(duì)分辨率(使用這種說(shuō)法的人認(rèn)為,dpi才是真正的分辨率)
? ? ? android.util.TypedValue類提供了一個(gè)函數(shù),支持把所有的單位換算到px,實(shí)現(xiàn)代碼如下:

????/**
?????*?Converts?an?unpacked?complex?data?value?holding?a?dimension?to?its?final?floating?
?????*?point?value.?The?two?parametersunitandvalue*?are?as?in?{@link?#TYPE_DIMENSION}.
?????*??
?????*?@param?unit?The?unit?to?convert?from.
?????*?@param?value?The?value?to?apply?the?unit?to.
?????*?@param?metrics?Current?display?metrics?to?use?in?the?conversion?--?
?????*????????????????supplies?display?density?and?scaling?information.
?????*?
?????*?@return?The?complex?floating?point?value?multiplied?by?the?appropriate?
?????*?metrics?depending?on?its?unit.?
?????*/
????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;
????}




? ? ? 2 市占率比較高的手機(jī) ? ? ? 這些數(shù)據(jù)可以在http://screensiz.es/獲得:
手機(jī)型號(hào) 物理尺寸(inch) 分辨率(px) dpi px密度 Galaxy SIII 4.8 720*1080 360 XHDPI Sony Xperia Z 5 1080*1920 441 XXHDPI Galaxy SIII 4.3 480*800 219 HDPI Galaxy Nexus 4.6 720*1280 316 XHDPI Google Nexus 4 4.7 768*1280 320 XHDPI Galaxy SIV 5 1080*1920 441 XXHDPI Galaxy S Plus 4 480*800 233 HDPI Galaxy Note II 5.5 720*1280 267 XHDPI Galaxy S 4 480*800 233 MDPI Galaxy Note 5.3 800*1280 285 XHDPI
從數(shù)據(jù)來(lái)看,目前大部分的手機(jī)的屏幕尺寸在4~5英寸之間(拋開(kāi)note之類的跨界產(chǎn)品),DPI在HPI到XXHDPI(基本只有幾款旗艦機(jī)才會(huì)配置)之間。
? ? 3 dp單位的使用 ? ? dp單位的顯示效果與dpi無(wú)關(guān),那它實(shí)際的使用效果如何呢?
? ? ?我創(chuàng)建了一個(gè)Nexus S的模擬器,參數(shù)為:Android2.3.3,屏幕4寸,解析度480*800,HDPI。 然后準(zhǔn)備了如下layout:


執(zhí)行,獲得如下結(jié)果:


計(jì)算得到LinearLayout的實(shí)際大小為:150*150。
所以,dp適配到具體設(shè)備的像素的時(shí)候,是通過(guò)如下公式換算:
px?=?dp?*?scale;
scale由設(shè)備的由設(shè)備的設(shè)備的pixel密度決定:
LDPI的dpi在120左右,scale?=?0.75?//一般市面上是看不到LDPI的設(shè)備了。
MDPI的dpi在160左右,scale?=?1.0
HDPI的dpi在240左右,scale?=?1.5
XHDPI的dpi在320左右,scale?=?2.0
XXHDPI的dpi在440左右,scale?=?3.0
所以,實(shí)際使用中,1dp約等于1/160inch,所以,可以讓我們的app在大多數(shù)的屏幕上保持相近的呈現(xiàn)效果。

但是,使用dp來(lái)適配所有設(shè)備是不現(xiàn)實(shí)的:
1.?呈現(xiàn)效果仍舊會(huì)有差異,僅僅是相近而已。
2.?當(dāng)設(shè)備的物理尺寸存在差異的時(shí)候,dp就顯得無(wú)能為力了。為4.3寸屏幕準(zhǔn)備的UI,運(yùn)行在5.0寸的屏幕上,很可能在右側(cè)和下側(cè)存在大量的空白。而5.0寸的UI運(yùn)行到4.3寸的設(shè)備上,很可能顯示不下。

????4.?根據(jù)屬性的資源適配機(jī)制

????如果想獲得最好的適配效果,那么根據(jù)不同平臺(tái)的參數(shù)進(jìn)行針對(duì)性的適配,毫無(wú)疑問(wèn)可以獲得最佳的效果。系統(tǒng)會(huì)根據(jù)設(shè)備的具體參數(shù),根據(jù)資源文件的屬性篩選最合適的資源。
????apk中提供的資源包括animator、anim、color、drawable、layout、menu、raw、values、xml這9種。這些資源保存在res文件下的對(duì)應(yīng)文件夾中。
????每個(gè)文件夾的名字都可以用多種屬性來(lái)修飾,以便系統(tǒng)在執(zhí)行的過(guò)程中根據(jù)設(shè)備的實(shí)際情況使用不同的資源。
    
????不同的屬性以“-”連接,以優(yōu)先級(jí)從高到低的方式排列(否則編譯錯(cuò)誤),形式如下:
????資源名-屬性1-屬性2-屬性3...
????以下是幾種個(gè)人覺(jué)得比較有用的幾個(gè)屬性:
????Language?and?region?:?用于指定語(yǔ)言和區(qū)域,多國(guó)語(yǔ)言最常用的屬性,例如:en,en-rUS。
????Screan?size?:?用來(lái)指定屏幕大小,包含如下值(由小到達(dá)):small(最小尺寸426*320dp,基本在3.2寸以上),normal(最小尺寸470*320dp,基本在3.3寸以上),large(最小尺寸640*480dp,基本在5.0寸以上),xlarge(最小尺寸960*720,基本在7.5寸以上)。
????Screan?orientation?:?屏幕方向,值為port或者land。
????UI?mode?:?值為car、desk、television、appliance。
????Night?mode?:?值為ienight、?notnight(可能對(duì)文本閱讀類型的app比較有用)
????Screan?pixel?density?:?最常用的屬性了,值包括:ldpi,mdpi,hdpi,xhdpi,xxhdpi,nodpi,tvdpi。其中,nodpi用于開(kāi)發(fā)者不希望系統(tǒng)對(duì)圖片進(jìn)行縮放的情況,tvdpi的界于hdpi和mdpi之間,dpi一般在213左右,多用于基于Android系統(tǒng)的智能電視,大部分app其實(shí)很少用到。
????Platform?version?:?值為:v
???app運(yùn)行時(shí),系統(tǒng)會(huì)根據(jù)屬性選擇適配的資源進(jìn)行展示。如果有符合的資源則使用,反之,當(dāng)符合的資源不存在時(shí),系統(tǒng)會(huì)去尋找最相近的可用資源來(lái)代替。但是,查找的屬性不同,查找的順序會(huì)有所有差異。

???對(duì)dpi屬性來(lái)說(shuō),查找的順序?yàn)?,高dpi的資源優(yōu)先。例如,沒(méi)能找到hdpi的圖片資源,則系統(tǒng)的搜索順序是drawable-xhdpi->drawable-xxhdpi->drawable-mdip->drawable->drawable->drawable-ldpi。這里drawable被認(rèn)為比drawable-ldpi更接近hdpi。
???另外,對(duì)于圖片資源在找到相近的資源后,系統(tǒng)還需要對(duì)圖片進(jìn)行縮放才會(huì)進(jìn)行使用(否則,可能出現(xiàn)顯示不下,或者圖片過(guò)小的問(wèn)題)。上文的例子中,如果在drawable-xhdpi中找到了資源,那么找到的圖片會(huì)先縮小到0.75倍以后再使用;如果是在drawable-mdpi中找到了資源,那么圖片需要放大到1.5倍以后再使用(放大肯定會(huì)造成圖片模糊,可能這就是高dpi資源優(yōu)先的原因所在)。
???有時(shí)候,我們的圖片資源不一定是從drawable文件夾中讀取的,還有可能是從sd卡上讀取的,或者從網(wǎng)絡(luò)上下載的。這個(gè)時(shí)候,我們需要注意,默認(rèn)情況下,通過(guò)BitmapFactory.decodeFile()函數(shù)生成的圖片被認(rèn)為是MDPI的,如果想讓圖片也獲得與drawable文件夾相似的縮放能力,則需要通過(guò)BitmapFactory.Option.inDensity屬性設(shè)置(例如如果圖片是為hdpi準(zhǔn)備的,則設(shè)置為240)。

????對(duì)于screan?size,查找的順序則是小尺寸優(yōu)先,大尺寸放棄。例如,在Galaxy?note?2上執(zhí)行apk時(shí),如果未能找到layout-large資源,則查找順序?yàn)椋簂ayout-normal->layout->layout-small,不會(huì)查找layout-xlarge。
???6.?個(gè)人對(duì)于多設(shè)備UI適配的理解
???以下是個(gè)人的一點(diǎn)總結(jié):
???I.???使用簡(jiǎn)潔的風(fēng)格來(lái)設(shè)計(jì)UI,讓界面變得簡(jiǎn)單并且一體化,使UI有更加的自適應(yīng)能力。
???II.??盡量使用match_parent,wrap_content等屬性來(lái)實(shí)現(xiàn)實(shí)現(xiàn)UI的自適應(yīng),減少dp的使用,盡量不要使用px。
???III.?如果使用dp,那么不要在layout文件中顯示的設(shè)定數(shù)值,而是通過(guò)dimens文件來(lái)引用,不同設(shè)備上就可以使用同一份layout,而通過(guò)不同的dimens來(lái)適配。
???IV.??可以的情況下,盡量使用.9的png文件,通過(guò)無(wú)損的縮放來(lái)適應(yīng)UI。
???V.???有些在XML上很難設(shè)定的UI細(xì)節(jié),可能可以通過(guò)java代碼動(dòng)態(tài)調(diào)整的方案來(lái)解決。
???VI.??如果有需要的話,可以通過(guò)w720dp,h360dp,1024x768等屬性來(lái)對(duì)市面上銷量比較好的手機(jī)做針對(duì)性的UI適配。
???VII.?沒(méi)有真機(jī)的情況下,可以通過(guò)SDK內(nèi)的模擬器和網(wǎng)上的在線模擬器檢查UI效果。
???VIII.對(duì)于某些app,可以使用Html5來(lái)開(kāi)發(fā)UI(即以app內(nèi)嵌WebView控件來(lái)展示Html5),可能可以獲得更加的UI適應(yīng)效果。

???最后記錄幾個(gè)與UI相關(guān)的JAVA?API:
???DisplayMetrics?dm?=?Context.getResource().getDisplayMetrics()//dm中可以獲得scaledDensity,densityDpi,heightPixels,widthPixels等信息。

???Configuration?config?=?getResources().getConfiguration()?//config中可以獲取設(shè)備的配置信息,我們可以根據(jù)具體的信息展現(xiàn)不同的UI。這里有一點(diǎn)值得注意的是,config.screenWidthDp和理論計(jì)算可能會(huì)有偏差:例如,9100的參數(shù)為800x480,hdpi,800/1.5=533,但是實(shí)際運(yùn)行時(shí),config.screenWidthDp=508。如果為9100做UI適配,那么“w508dp”才是有效的,”w533dp“則無(wú)法匹配給9100。相似的,偏差也可能出現(xiàn)在config.screenHeightDp上。


參考資料:
Google官方資料
Android屏幕適配-資源文件夾命名與匹配規(guī)則
Android開(kāi)發(fā)筆記-屏幕適配
Android多屏幕適配
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉