1、螢幕相關概念
1.1解析度
是指螢幕上有橫豎各有多少個畫素
1.2螢幕尺寸
指的是手機實際的物理尺寸,比如常用的2.8英吋,3.2英吋,3.5英吋,3.7英吋
android將螢幕大小分為四個級別(small,normal,large,and extra large)。
1.3螢幕密度
每英吋畫素數
手機可以有相同的解析度,但螢幕尺寸可以不相同,
diagonal pixel表示對角線的畫素值(=),dpi=933/3.7=252
android將實際的螢幕密度分為四個通用尺寸(low,medium,high,and extra high)
一般情況下的普通螢幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi
對於螢幕來說,dpi越大,螢幕的精細度越高,螢幕看起來就越清楚
1.4密度無關的畫素(density-independent pixel——dip)
dip是一種虛擬的畫素單位
dip和具體畫素值的對應公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)
當你定義應用的布局的ui時應該使用dp單位,確保ui在不同的螢幕上正確顯示。
手機螢幕分類和畫素密度的對應關係如表1所示
手機尺寸分布情況(如圖所示,
目前主要是以解析度為800*480和854*480的手機使用者居多
從以上的螢幕尺寸分布情況上看,其實手機只要考慮3-4.5寸之間密度為1和1.5的手機
2、android多螢幕支援機制
android的支援多螢幕機制即用為當前裝置螢幕提供一種合適的方式來共同管理並解析應用資源。
android平台中支援一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合適資源。
指定大小(size-specific)的合適資源是指small, normal, large, and xlarge。
指定密度(density-specific)的合適資源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high).
android有個自動匹配機制去選擇對應的布局和資源
1)介面布局方面
根據物理尺寸的大小準備5套布局:
layout(放一些通用布局xml檔案,比如介面頂部和底部的布局,不會隨著螢幕大小變化,類似windos視窗的title bar),
layout-small(螢幕尺寸小於3英吋左右的布局),
layout-normal(螢幕尺寸小於4.5英吋左右),
layout-large(4英吋-7英吋之間),
layout-xlarge(7-10英吋之間)
2)資源方面
需要根據dpi值準備5套資源:
drawalbe-ldpi:低解析度的,如qvga (240x320)
drawable-mdpi:中等解析度的,如hvga (320x480)
drawable-hdpi:高解析度的,如wvga (480x800),fwvga (480x854)
drawable-xhdpi:至少960dp x 720dp
android有個自動匹配機制去選擇對應的布局和資源。
系統會根據機器的解析度來分別到這幾個資料夾裡面去找對應的。
在開發程式時為了相容不同平台不同螢幕,建議各自資料夾根據需求均存放不同版本。
3、androidmanifest.xml 配置
android從1.6和更高,google為了方便開發者對於各種解析度機型的移植而增加了自動適配的功能
3.1是否支援多種不同密度的螢幕
android:anydensity=["true" | "false"]
如果android:anydensity="true"
指應用程式支援不同密度,會根據螢幕的解析度自動去匹配。
如果android:anydensity="false"
應用程式支援不同密度,系統自動縮放尺寸和這個的座標。具體解釋一下系統是如何自動縮放資源的。
例如我們在hdpi,mdpi,ldpi資料夾下擁有同一種資源,那麼應用也不會自動地去相應資料夾下尋找資源,這種情況都是出現在高密度,以及低密度的手機上,比如說一部240×320畫素的手機,
如果設定android:anydensity="false",android系統會將240 x 320(低密度)轉換為 320×480(中密度),這樣的話,應用就會在小密度手機上載入mdpi檔案中的資源。
3.2是否支援大螢幕
android:largescreens=["true" | "false"]
如果在宣告不支援的大螢幕,而這個螢幕尺寸是larger的話,系統使用尺寸為("normal")和密度為("medium)顯示,
不過會出現一層黑色的背景。
3.3是否支援小螢幕
android:smallscreens=["true" | "false"]
如果在宣告不支援的小螢幕,而當前螢幕尺寸是smaller的話,系統也使用尺寸為("normal")和密度為("medium)顯示
如果應用程式能在小螢幕上正確縮放(最低是small尺寸或最小寬度320dp),那就不需要用到本屬性。否則,就應該為最小螢幕寬度識別符號設定本屬性
來匹配應用程式所需的最小尺寸。
4、android提供3種方式處理螢幕自適應
4.1預縮放的資源(基於尺寸和密度去尋找)
1)如果找到相應的尺寸和密度,則利用這些進行無縮放顯示。
2)如果沒法找到相應的尺寸,而找到密度,則認為該尺寸為 "medium",利用縮放顯示這個。
3)如果都無法匹配,則使用預設進行縮放顯示。預設預設標配 "medium" (160)。
4.2自動縮放的畫素尺寸和座標(密度相容)
1)如果應用程式不支援不同密度android:anydensity="false",系統自動縮放尺寸和這個的座標。
2)對於預縮放的資源,當android:anydensity="false",也不生效。
3)android:anydensity="false",只對密度相容起作用,尺寸相容沒效果
4.3相容更大的螢幕和尺寸(尺寸相容)
1)對於你在宣告不支援的大螢幕,而這個螢幕尺寸是normal的話,系統使用尺寸為 ("normal")和密度為("medium)顯示。
2.)對於你在宣告不支援的大螢幕,而這個螢幕尺寸是larger的話,系統同樣使用尺寸為("normal")和密度為("medium)顯示,
不過會出現一層黑色的背景。
5、android系統自動適配技巧
android系統採用下面兩種方法來實現應用的自動適配:
1)布局檔案中定義長度的時候,最好使用wrap_content,fill_parent, 或者dp 進行描述,這樣可以保證在螢幕上面展示的時候有合適的大小
2)為不同螢幕密度的手機,提供不同的點陣圖資源,可以使得介面清晰無縮放。
對應bitmap 資源來說,自動的縮放有時會造成放大縮小後的影象變得模糊不清,這是就需要應用為不同螢幕密度配置提供不同的資源:為高密度的螢幕提供高畫質晰度的影象等。
3)不要使用absolutelayout
4)畫素單位都使用dip,文字單位使用sp
6、在**中獲取螢幕畫素、螢幕密度
displaymetrics metric = new displaymetrics();
getwindowmanager().getdefaultdisplay().getmetrics(metric);
int width = metric.widthpixels; // 螢幕寬度(畫素)
int height = metric.heightpixels; // 螢幕高度(畫素)
float density = metric.density; // 螢幕密度(0.75 / 1.0 / 1.5)
int densitydpi = metric.densitydpi; // 螢幕密度dpi(120 / 160 / 240)
7、 一般多解析度處理方法及其缺點
7.1 縮放
基於當前螢幕的精度,平台自動載入任何未經縮放的限定尺寸和精度的。如果不匹配,平台會載入預設資源並且在放大或者縮小之後可以滿足當前介面的顯示要求。例如,當前為高精度螢幕,平台會載入高精度資源(如helloandroid中drawable-hdpi 中的點陣圖資源),如果沒有,平台會將中精度資源縮放至高精度,導致顯示不清晰。
7.2 自動定義畫素尺寸和位置
如果程式不支援多種精度螢幕,平台會自動定義畫素絕對位置和尺寸值等,這樣就能保證元素能和精度160 的螢幕上一樣能顯示出同樣尺寸的效果。例如,要讓wvga 高精度螢幕和傳統的hvga 螢幕一樣顯示同樣尺寸的,當程式不支援時,系統會對程式慌稱螢幕解析度為320×480,在(10,10)到(100,100)的區域內繪製圖形完成之後,系統會將圖形放大到(15,15)到(150,150)的螢幕顯示區域。
7.3 相容更大尺寸的螢幕
當前螢幕超過程式所支援螢幕的上限時,定義supportsscreens元素,這樣超出顯示的基準線時,平台在此顯示黑色的背景圖。例如,wvga 中精度螢幕上,如程式不支援這樣的大螢幕,系統會謊稱是乙個320×480 的,多餘的顯示區域會被填充成黑色。
7.4 採用opengl 動態繪製
android 底層提供了opengl 的介面和方法,可以動態繪製,但是這種方式對不熟悉計算機圖形學的開發者來講是乙個很大的挑戰。一般開發遊戲,採用opengl 方式。
7.5 多個apk 檔案
安卓螢幕相關概念
px pixels 畫素 螢幕上的點,與密度相關。密度大了,單位面積上的px比較多。表示螢幕實際的象素。例如,320 480的螢幕在橫向有320個象素,在縱向有480個素。dip或dp 與密度無關的畫素 這個和裝置硬體有關,設定一些view的寬高可以用這個,一般情況下,在不同解析度,都不會有縮放的感...
linux網路相關概念1
dmidecode採集有關硬體內容,如下圖 一般是用於centos7系統 臨時修改ip,一般為ifconfig 網絡卡名 ip名,如ifconfig docker0 192.168.1.110 臨時修改ip和掩碼 或者可以ifconfig 加網絡卡名,比如ifconfig docker0,只檢視do...
TouchGFX 螢幕概念
介面布局 view,邏輯處理 presenter 因touchgfx分配記憶體的的方式是,按照最大的screen分配,即最大view 最大presenter,所以同一時刻只有乙個screen是啟用的 只有當前啟用的螢幕接收到感興趣的事件,才會在view中做出對應的改變,否則就是簡單的丟棄,這實質上是...