android適配,android適配方案

Android機型適配總結

分辨率對應DPI

成都創新互聯專業IDC數據服務器托管提供商,專業提供成都服務器托管,服務器租用,中國電信成都樞紐中心,中國電信成都樞紐中心,成都多線服務器托管等服務器托管服務。

ldpi? QVGA (240×320)

mdpi? HVGA (320×480)

hdpi? WVGA (480×800),FWVGA (480×854)

xhdpi? 720P(1280*720)

xxhdpi 1080p(1920*1080 )

xxxhdpi 4K(3840×2160)

機型適配方面常規處理方法:

1、開發之前UI給出不同尺寸標準的多套素材,一般情況下給出:hdpi、xhdpi、xxxhdpi 三種尺寸類型的素材。

2、特殊類型圖片使用Android Studio內置draw9path工具進行制作,例如聊天界面中內容背景圖片。

3、布局編寫時盡量使用 Linearlayout 與 ?RelativeLayout,LinearLayout內部可以使用weight(權重)屬性將子控件的尺寸按比例進行設置。RelativeLayout 內部可以使用layout_align...(相對于xxx)屬性將子控件的尺寸相對于父控件或相對于其他子控件進行設置。

4、設置尺寸的時候長度單位 ?布局使用 dp ?字符使用 ?sp。 其實字體大小的尺寸使用 ?dp 也可以,但是sp的情況下 用戶使用系統設置字體大小的時候可以改變控件中字體的大小,但是使用dp設置的字體就不會產生變化。

5、針對每一個屏幕的尺寸生成一套px與dp的轉換方案,詳情見博客: Android機型適配方案 。

6、google推出了一個百分比布局庫,可以使用百分比的方式進行布局尺寸的設置,詳情見博客: Android百分比布局庫(percent-support-lib)解析與擴展

7、利用自定義View的方式去解決,其實原理也是,在繪制View的時候,獲取屏幕的尺寸然后按照一定的比例去設置控件的尺寸

還有一些瑣碎知識點需要了解并記?。?/p>

1. px (pixels)像素 :

一個像素通常被視為圖像的最小的完整采樣,這個用的比較多,特別是web開發,頁面基本都是使用像素作為單位的.

2.dp:

這個是最常用但也最難理解的尺寸單位。它與“像素密度”密切相關,所以首先我們解釋一下什么是像素密度。假設有一部手機,屏幕的物理尺寸為1.5英寸x2英寸,屏幕分辨率為240x320,則我們可以計算出在這部手機的屏幕上,每英寸包含的像素點的數量為240/1.5=160dpi(橫向)或320/2=160dpi(縱向),160dpi就是這部手機的像素密度,像素密度的單位dpi是Dots Per Inch的縮寫,即每英寸像素數量。橫向和縱向的這個值都是相同的,原因是大部分手機屏幕使用正方形的像素點。

不同的手機/平板可能具有不同的像素密度,例如同為4寸手機,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比較低。Android系統定義了四種像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它們對應的dp到px的系數分別為0.75、1、1.5和2,這個系數乘以dp長度就是像素數。例如界面上有一個長度為“80dp”的圖片,那么它在240dpi的手機上實際顯示為80x1.5=120px,在320dpi的手機上實際顯示為80x2=160px。如果你拿這兩部手機放在一起對比,會發現這個圖片的物理尺寸“差不多”。

3.dip:

與dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后來為了與sp統一就建議使用dp這個名字了。

4.sp:

與縮放無關的抽象像素(Scale-independent Pixel)。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義文字尺寸大?。ㄐ?、正常、大、超大等等),當文字尺寸是“正?!睍r1sp=1dp=0.00625英寸,而當文字尺寸是“大”或“超大”時,1sp1dp=0.00625英寸。類似我們在windows里調整字體尺寸以后的效果——窗口大小不變,只有文字大小改變。

還有一些詳細的情況需要了解,都在這個博客里: 點擊進入

Android 屏幕適配

摘自:

摘自:

摘自:

因為ui設計師給你的設計圖是以px為單位的,Android開發則是使用dp作為單位的,那么我們需要進行轉換:

擴展:

Android屏幕適配-基礎篇

?? Android推薦使用dp作為尺寸單位來適配UI ,通過dp加上自適應布局和weight比例布局可以基本解決不同手機上適配的問題,這基本是最原始的Android適配方案。

?? 缺點:

??(1)這種方案只能保證我們寫出來的界面適配絕大部分手機,部分手機仍然需要單獨適配,但dpi的不同,還是會存在差異。

??(2)一般的設計稿都是以px為單位的,所以我們在寫layout文件的時候需要將px轉為dp,影響開發效率。

??為了高效的實現UI開發,出現了新的適配方案,我把它稱作寬高限定符適配。簡單說,就是模仿市面上所有的Android手機的寬高像素值,設定一個基準的分辨率,其他分辨率都根據這個基準分辨率來計算,在不同的尺寸文件夾內部,根據該尺寸編寫對應的dimens文件:

?? 鴻洋大神的作品 ,使用也超級簡單,核心功能就是在繪制的時候在onMeasure里面做變換,重新計算px。

?? 缺點:

??我們自定義的控件可能會被影響或限制,可能有些特定的控件(框架沒有做適配的控件),需要單獨適配。

小結:上述幾種適配方案都是實際開發中用過的方案,但隨著技術不斷的更新,出現了更好的適配方案。

?? 1.SmallestWidth適配(sw限定符適配)

?? 實現原理:

??Android會識別屏幕可用高度和寬度的最小尺寸的dp值(其實就是手機的寬度值),然后根據識別到的結果去資源文件中尋找對應限定符的文件夾下的資源文件。

?? sw限定符適配 和 寬高限定符適配 類似,區別在于,前者有很好的容錯機制,如果沒有value-sw360dp文件夾,系統會向下尋找,比如離360dp最近的只有value-sw350dp,那么Android就會選擇value-sw350dp文件夾下面的資源文件。這個特性就完美的解決了上文提到的寬高限定符的容錯問

?? 優點:

????1.非常穩定,極低概率出現意外

????2.不會有任何性能的損耗

????3.適配范圍可自由控制,不會影響其他三方庫

?? 缺點:

????就是多個dimens文件可能導致apk變大,幾百k。

????這里有個問題:

????在項目的其他 module 中怎么實現適配?難道也要多套 dimens 文件?

????解答:

????并不需要多套 dimens 文件,只需要在 values 文件夾下有一套與 app module 一樣的 dimens 文件即可達到適配。因為經過編譯,所有 module 中的 dimen 數據都會統一歸類到主 module(即 app module)中的 values/dimens.xml 文件中了,然后系統又會根據你設置的值去找對應 values-swxxxdp 文件夾下的dimens.xml 文件中的值。

附件: [生成sw文件的工具]( ?

to=https%3A%2F%2Fgithub.com%2Fladingwu%2Fdimens_sw)

實現原理:修改系統的density值(核心)

??今日頭條適配是以設計圖的寬或高進行適配的,適配最終是改變系統density實現的。

過程:

缺點:

?? 1.只需要修改一次 density,項目中的所有地方都會自動適配,這個看似解放了雙手,減少了很多操作,但是實際上反應了一個缺點,那就是只能一刀切的將整個項目進行適配,但適配范圍是不可控的。

?? 2.這個方案依賴于設計圖尺寸,但是項目中的系統控件、三方庫控件、等非我們項目自身設計的控件,它們的設計圖尺寸并不會和我們項目自身的設

??AndroidAutoSize 是基于今日頭條適配方案,該開源庫已經很大程度上解決了今日頭條適配方案的兩個缺點,可以對activity,fragment進行取消適配。也是目前我的項目中所使用的適配方案。

?? 使用也非常簡單只需兩步:

???? 第一步: 導入依賴

???? 第二步: 配置AndroidManifest

???? 在 AndroidManifest 中填寫全局設計圖尺寸 (單位 dp),如果使用副單位,則可以直接填寫像素尺寸,不需要再將像素轉化為 dp,詳情請查看 demo-subunits

老師給的UI設計是在藍湖上的,因為還沒工作,接觸就藍湖,SW個人感覺好處就是藍湖上尺寸多少你就寫多少就行

Android-屏幕適配全攻略(絕對詳細)(一)

關鍵字: 屏幕適配 px dp dpi sp large限定符 .9.png

前言: 這篇文章依然是我在 [慕課網 ][h]學習 凱子哥 的同名視頻 Android-屏幕適配全攻略 ,所記錄下來的筆記---凱子哥講得真的超詳細。

[h]: "MOOC"

從上圖可以看出,主流的分辨率是前六種:1280×720、1920×1080、800×480、854×480、960×540、1184×720,不過我們有解決方案。看完這篇文章,想必你就可以解決常見的屏幕適配問題。

接下來正式進入正題。

介紹幾個在Android屏幕適配上非常重要的名詞:

屏幕尺寸 是指屏幕對角線的長度。單位是英寸,1英寸=2.54厘米

屏幕分辨率 是指在橫縱向上的像素點數,單位是px,1px=1像素點,一般是縱向像素橫向像素,如1280×720

屏幕像素密度 是指每英寸上的像素點數,單位是dpi,即“dot per inch”的縮寫,像素密度和屏幕尺寸和屏幕分辨率有關

dip: Density Independent Pixels(密度無關像素)的縮寫。以 160dpi 為基準,1dp=1px

dp: 同 dip

dpi: 屏幕像素密度的單位,“dot per inch”的縮寫

px: 像素,物理上的絕對單位

sp: Scale-Independent Pixels的縮寫,可以根據文字大小首選項自動進行縮放。Google推薦我們使用12sp以上的大小,通??梢允褂?2sp,14sp,18sp,22sp,最好不要使用奇數和小數。

用于區分不同的像素密度。

在Google官方開發文檔中,說明了 ** mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 ** 的尺寸比例進行縮放。例如,一個圖標的大小為48×48dp,表示在mdpi上,實際大小為48×48px,在hdpi像素密度上,實際尺寸為mdpi上的1.5倍,即72×72px,以此類推。

我們可以通過以下幾種方式來支持各種屏幕尺寸:

wrap_content: 根據控件的內容設置控件的尺寸

math_parent: 根據父控件的尺寸大小設置控件的尺寸

weight: 權重,在線性布局中可以使用weight屬性設置控件所占的比例

例如,我們要實現下圖所顯示的效果:當屏幕尺寸改變時,new reader控件兩邊的控件大小不變,new reader控件會占完剩余的空間。

具體布局文件如下:

小插曲: 關于 android:layout_weight 屬性

一般情況,我們都是設置要進行比例分配的方向的寬度為0dp,然后再用權重進行分配。如下:

效果為:

效果為:

button1寬度=L+(L-2L)×1/3=2/3L

button2寬度=L+(L-2L)×2/3=1/3L

當然,還有其他的方式,都可以運用此公式進行計算。

在實際開發中,我們一般使用0dp的方式,而不使用其他方式。

簡單的布局一般都使用 線性布局 ,而略微復雜點的布局,我們使用 相對布局 ,大多數時候,我們都是使用這兩種布局的嵌套。

我們使用 相對布局 的原因是, 相對布局 能在各種尺寸的屏幕上保持控件間的相對位置。

res/layout/main.xml 單面板:

res/layout-large/main.xml 雙面板:

如果這個程序運行在屏幕尺寸大于7inch的設備上,系統就會加載 res/layout-large/main.xml 而不是 res/layout/main.xml ,在小于7inch的設備上就會加載 res/layout/main.xml 。

需要注意的是,這種通過 large 限定符分辨屏幕尺寸的方法,適用于android3.2之前。在android3.2之后,為了更精確地分辨屏幕尺寸大小,Google推出了最小寬度限定符。

res/layout-sw600dp/main.xml ,雙面板布局: Small Width 最小寬度

這種方式是不區分屏幕方向的。這種最小寬度限定符適用于android3.2之后,所以如果要適配android全部的版本,就要使用 large 限定符和 sw600dp 文件同時存在于項目 res 目錄下。

這就要求我們維護兩個相同功能的文件。為了避免繁瑣操作,我們就要使用布局別名。

由于后兩個文具文件一樣,我們可以用以下兩個文件代替上面三個布局文件:

res/layout/main.xml 單面板布局

res/layout/main_twopanes.xml 雙面板布局

然后在 res 下建立

res/values/layout.xml 、

res/values-large/layout.xml 、

res/values-sw600dp/layout.xml 三個文件。

默認布局

res/values/layout.xml :

Android3.2之前的平板布局

res/values-large/layout.xml :

Android3.2之后的平板布局

res/values-sw600dp/layout.xml :

這樣就有了 main 為別名的布局。

在activity中 setContentView(R.layout.main);

這樣,程序在運行時,就會檢測手機的屏幕大小,如果是平板設備就會加載 res/layout/main_twopanes.xml ,如果是手機設備,就會加載 res/layout/main.xml 。我們就解決了只使用一個布局文件來適配android3.2前后的所有平板設備。

如果我們要求給橫屏、豎屏顯示的布局不一樣。就可以使用 屏幕方向限定符 來實現。

例如,要在平板上實現橫豎屏顯示不用的布局,可以用以下方式實現。

res/values-sw600dp-land/layouts.xml :橫屏

res/values-sw600dp-port/layouts.xml :豎屏

自動拉伸位圖,即android下特有的 .9.png 圖片格式。

當我們需要使圖片在拉伸后還能保持一定的顯示效果,比如,不能使圖片中的重要像素拉伸,不能使內容區域受到拉伸的影響,我們就可以使用 .9.png 圖來實現。

要使用 .9.png ,必須先得創建 .9.png 圖片,androidSDK給我們提供了的工具就包含 .9.png 文件的創建和修改工具。雙擊 SDK安裝目錄 oolsdraw9patch.bat ,就會打開下圖所示的窗口。

下面是一個例子:

Button屬性設置:

如果我們選擇的內容區域偏差太大,可能就不會顯示出text值 BUTTON 。

好了,這篇文章寫的有點多了,剩下的內容放在 下篇文章 記錄吧。

內容提要:

解決方案-支持各種屏幕密度

解決方案-實施自適應用戶界面流程

未完待續

本文標題:android適配,android適配方案
文章鏈接:http://m.kartarina.com/article36/dseegsg.html

成都網站建設公司_創新互聯,為您提供建站公司、App設計、小程序開發企業網站制作、定制網站、面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司
主站蜘蛛池模板: 亚洲AV无码一区二区乱子伦| 亚洲动漫精品无码av天堂| 国产50部艳色禁片无码| 中文字幕在线无码一区| 日韩精品无码一区二区三区免费| 欧日韩国产无码专区| 无码爆乳护士让我爽| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 久久伊人中文无码| 人妻少妇精品无码专区动漫| 亚洲成A∨人片在线观看无码| 国产精品无码一区二区三级| 国产a v无码专区亚洲av| 久久男人Av资源网站无码软件| 亚洲AV区无码字幕中文色| 午夜无码熟熟妇丰满人妻| 无码Aⅴ在线观看| 午夜福利无码不卡在线观看| 国产精品亚洲一区二区无码| 最新亚洲人成无码网站| 色窝窝无码一区二区三区成人网站 | 亚洲va中文字幕无码| 国产成人综合日韩精品无码| 少妇无码一区二区三区| 亚洲乱亚洲乱妇无码麻豆| 国产99久久九九精品无码| 无码人妻精品一区二区蜜桃百度 | 中文有无人妻vs无码人妻激烈| 在线精品自拍无码| 韩国精品一区二区三区无码视频| 无码日韩人妻AV一区免费l| 亚洲精品无码日韩国产不卡av| 久久久久久久人妻无码中文字幕爆| 熟妇人妻中文a∨无码| 国产精品无码无卡无需播放器| 2020无码专区人妻系列日韩| 成人免费无码大片a毛片| 精品久久久久久无码人妻中文字幕| 高清无码午夜福利在线观看| 蜜芽亚洲av无码一区二区三区| 成人免费无码大片a毛片|