Android屏幕配適、版本配適與多語言支持

屏幕配適

1.Drawable資源

icon的尺寸建議

目前主流的屏幕密度:240dpi (480 * 800px) , 320dpi (720*1280px) , 480dpi(1080*1920px)現(xiàn)在新出的手機(jī)幾乎全是全高清屏(1080*1920px)

Android圖片資源目錄

mdpi [1倍]160dpi

hdpi [1.5倍] ? 240dpi

xhdpi [2倍] ? 320dpi

xxhdpi [3倍] 480dpi

xxxhdpi [4倍] 640dpi

因此對其他圖片資源的建議是:

a.一般采用720 * 1280的屏幕尺寸設(shè)計,這樣切圖可以直接適配720 * 1280的機(jī)型。

b.720 * 1280下切的圖基本可以適配大部分機(jī)型。

d.適配480 * 800的機(jī)型,只需要把切圖 * 0.75。

e.適配1080 * 1920 的機(jī)型,只需要把切圖 * 1.50即可。


2.設(shè)計的尺寸建議

a.以720 * 1280作為設(shè)計標(biāo)準(zhǔn),畫布大小定位720 * 1280 (以后1080*1920px做標(biāo)準(zhǔn)亦可,類推)

b.只使用偶數(shù)單位的尺寸

c.盡量只使用 24pt, 28pt , 32pt, 44pt大小的字體

d.設(shè)計完成之后,所有尺寸的px值除以2作為dp數(shù)據(jù)交給開發(fā)人員

e.三份切圖,分別是:xhdpi,hdpi,mdpi的資源,如果要切一份就使用xhdpi

柵格系統(tǒng)的最小單位是8dp,一切距離、尺寸都應(yīng)該是8dp的整數(shù)倍,所有可操作元素最小點擊區(qū)域尺寸為48dp X 48dp。以下是一些常見的尺寸與距離:

頂部狀態(tài)欄高度:24dp

Appbar最小高度:56dp

底部導(dǎo)航欄高度:48dp

懸浮按鈕尺寸:56x56dp/40x40dp

用戶頭像尺寸:64x64dp/40x40dp

小圖標(biāo)點擊區(qū)域:48x48dp

側(cè)邊抽屜到屏幕右邊的距離:56dp

卡片間距:8dp

分隔線上下留白:8dp

大多元素的留白距離:16dp

屏幕左右對齊基線:16dp

文字左側(cè)對齊基線:72dp

另外注意56dp這個數(shù)字,許多尺寸可變的控件,比如對話框、菜單等,寬度都可以按56的整數(shù)倍來設(shè)計

3.DisplayMetrics的類

有時候在自定義view,draw的時候單位往往是px,要做一個dpi的轉(zhuǎn)換,需要通過該類獲取屏幕的信息,如:屏幕密度,寬高等。

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

float density = displayMetrics.density; //屏幕密度? ? ? ??

int densityDpi = displayMetrics.densityDpi;//屏幕密度dpi? ? ? ??

int heightPixels = displayMetrics.heightPixels;//屏幕高度的像素? ? ? ? I

nt widthPixels = displayMetrics.widthPixels;//屏幕寬度的像素? ? ? ?

?float scaledDensity = displayMetrics.scaledDensity;//字體的放大系數(shù)? ? ? ??

float xdpi = displayMetrics.xdpi;//寬度方向上的dpi? ? ? ??

float ydpi = displayMetrics.ydpi;//高度方向上的dpi

4.頁面控件屬性常用適配方法

a.盡量使用線性布局(LinearLayout)和相對布局(RelateLayout),盡量不使用絕對布局(AbsoluteLayout)和幀布局(FrameLayout)。

b.盡量使用wrap_content、mach_parent讓view自適應(yīng)或最大化,盡量不要寫寬高的值。

c.使用線下布局的百分比weight權(quán)重時,要把能伸縮方向的寬度寫成“0dp“,如果寫成wrap_coent會使布局效果不佳等問題。

d.盡量使用android的Shape自定義view背景,這樣會隨之自適應(yīng)。

e.ImageView的ScaleType有幾種方式:matrix(默認(rèn))、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY;盡量使用fitCenter按比例擴(kuò)大至view寬度,能取得較好適配和顯示效果。(更多請參考:Android中的ImageView配適

f.獲取屏幕分辨率信息,進(jìn)行動態(tài)適配。(參考第三大點)

5.手機(jī)橫豎屏切換兼容適配

a.把屏幕設(shè)置成單一的橫屏或豎屏:

b.根據(jù)橫豎屏加載不同布局(android: screenOrientation="sensor")

通過this.getResources().getConfiguration().orientation來判斷當(dāng)前是橫屏還是豎屏,然后在onCreate方法中加載不同的布局

采用第二種方式要注意的有兩點

布局問題:

需要在res目錄先建立layout-land和layout-port目錄相應(yīng)的xml文件名字相同,然后在兩個文件夾下創(chuàng)建相同名字的兩套xml,系統(tǒng)就會根據(jù)不同的屏幕來進(jìn)行自動尋找。

切換時activity的生命周期:

activity生命周期在切換橫豎屏?xí)幸恍┯腥さ淖兓?/p>

a.不設(shè)置activity的android:configChanges時,切換橫屏,activity的生命周期會重新調(diào)用一次,但是切換豎屏?xí)r,生命周期會重新調(diào)用兩次。

b.當(dāng)設(shè)置activity的android:configChanges=“orientation”時,切換橫豎屏都會重新調(diào)用各生命周期一次。

c.當(dāng)設(shè)置activity的android:configChanges=“orientation|keyboardHidden”(大于api13時,需要設(shè)為“orientation|screenSize”)時,切換橫豎屏不會重新調(diào)用各生命周期,只會調(diào)用onConfigurationChanged方法。

一般設(shè)為b或者c

6.超大屏幕平板適配

平板應(yīng)用的特性:

a .多頁面顯示:由于屏幕大,空間會很足,如果是像手機(jī)只顯示單一頁面,會造成浪費,體驗也不好,所以平板往往會顯示手機(jī)上的多個子功能模塊頁面拼接在一起形成的大頁面;

b.內(nèi)置圖片需要較大的分辨率,也就是需要較大的內(nèi)存,apk會比一般的手機(jī)版apk要大。

對于大屏幕的平板8英寸以上(參考ipad mini,現(xiàn)在很多高端手機(jī)都是5-6英寸了,8英寸以上視為平板吧),基與平板應(yīng)用的特性,平板應(yīng)用開發(fā)一般采取如下兩種策略

1)兼容模式

采用單activity(或者盡量少activity)+多fragment的結(jié)構(gòu)開發(fā)應(yīng)用,在layout資源文件中創(chuàng)建三套布局:手機(jī)布局、平板橫屏布局、平板豎屏布局。

優(yōu)點:

? ? ? ? 只需要維護(hù)一個app

缺點:

? ? ? ? 設(shè)計及實現(xiàn)的難度變大,更復(fù)雜,有時候需要采取折衷方案

? ? ? ? 手機(jī)apk上由于含有平板的大分辨率圖片資源(設(shè)計上可以減少內(nèi)置資源)

2)開發(fā)另一套只適配平板的app

優(yōu)點:

? ? ? ? 與手機(jī)app分離獨立。不會因為要兼容而采用一些折衷方案,影響其性能、內(nèi)存

????????設(shè)計和實現(xiàn)更加自由

缺點:

? ? ? ? 需要維護(hù)兩套app


目前谷歌推薦第一種方案,但是國內(nèi)很多應(yīng)用是采取第二種方案。

7.版本SDK配適

可以通過判斷sdk的版本(Build.VERSION.SDK_INT),來為能夠使用的版本進(jìn)行個性化設(shè)置

例如:沉浸式狀態(tài)欄配適

在Android系統(tǒng)4.4以前,狀態(tài)欄的背景色和字體顏色都是不能改變的。但是4.4以后Google增加了改變狀態(tài)欄背景透明的方法??梢酝ㄟ^判斷sdk的版本,來為能夠使用的版本進(jìn)行個性化設(shè)置:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}

沉浸式狀態(tài)欄是Android在5.0中引入的,在5.0之前是沒有的,并且在Android6.0中沉浸式狀態(tài)欄的使用方法和5.0不一樣,因此需要做到版本兼容,針對于不同的Android進(jìn)行適配,同樣也是通過判斷Build.VERSION.SDK_INT來區(qū)分版本,進(jìn)行個性化配適

沉浸式狀態(tài)欄的實現(xiàn)方式有好幾種,更多請參考沉浸式狀態(tài)欄的實現(xiàn)


8.多語言支持

原則:內(nèi)置圖片資源不應(yīng)該出現(xiàn)文字(如果出現(xiàn)文字需要具備)、所有的文字需要放在res資源目錄特定語言目錄下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容