① 在android中如何讓你的程序適應各種解析度
各種Android操作系統的手機簡直就是琳琅滿目,屏幕解析度的差異可想而知。目前比較主流的有WVGA=800x480,HVGA=480x320,另外的還有QVGA=320x240。當然還有魅族M9的DVGA=960x640,還有蛋疼的摩托羅拉的FWVGA=854x480。
其實,在你layout的xml文件中,編寫的時候是不是用了許多的padding呢?如果是,那你就蛋疼了。因為這樣的布局永遠是無法適應所有手機屏幕的。
正確的做法應該是使用的是weight屬性。將你控制項的layout中的width、height設置為fill-parent,不要使用wrap——content。因為wrap-content的大小是不固定的。而weight(權重)這個屬性很好的解決了這個問題。
當包裹在控制項外面的Layout的width、height屬性都設置為fill-parent時,可以利用weight的反比特性。即如果控制項A設置weight為5,控制項B設置weight為7,那麼A所佔的空間為5/(5+7),B所佔的空間為7/(5+7)。這樣的反比屬性對任何解析度下的手機都是合適的。
當然,字體就不行了。那怎麼保證字體能夠跟布局一樣能夠自適應呢?
呵呵,很簡單,就是在你的res文件夾中創建一個文件夾,叫做values-320x240。其中320x240是你手機屏幕的解析度,根據你手機屏幕的情況做不同的命名,例如values-800x480。在該文件夾下創建一個dimens.xml文件,定義各種字體的大小。那麼系統就會自動根據你手機屏幕的解析度去調用響應的文件夾。
另外,值得提醒的是,記得在你默認的values文件下的dimens.xml文件中也要寫上相應的字體大小哦,因為當系統無法認識你手機屏幕大小的時候,它會自動去找你默認文件中的
東西,沒有寫的話程序會崩潰。
② Android界面布局怎麼樣適應不同解析度的手機
各種Android操作系統的手機簡直就是琳琅滿目,屏幕解析度的差異可想而知。目前比較主流的有WVGA=800x480,HVGA=480x320,另外的還有QVGA=320x240。當然還有魅族M9的DVGA=960x640,還有蛋疼的摩托羅拉的FWVGA=854x480。
其實,在你layout的xml文件中,編寫的時候是不是用了許多的padding呢?如果是,那你就蛋疼了。因為這樣的布局永遠是無法適應所有手機屏幕的。
正確的做法應該是使用的是weight屬性。將你控制項的layout中的width、height設置為fill-parent,不要使用wrap——content。因為wrap-content的大小是不固定的。而weight(權重)這個屬性很好的解決了這個問題。
當包裹在控制項外面的Layout的width、height屬性都設置為fill-parent時,可以利用weight的反比特性。即如果控制項A設置weight為5,控制項B設置weight為7,那麼A所佔的空間為5/(5+7),B所佔的空間為7/(5+7)。這樣的反比屬性對任何解析度下的手機都是合適的。
當然,字體就不行了。那怎麼保證字體能夠跟布局一樣能夠自適應呢?
呵呵,很簡單,就是在你的res文件夾中創建一個文件夾,叫做values-320x240。其中320x240是你手機屏幕的解析度,根據你手機屏幕的情況做不同的命名,例如values-800x480。在該文件夾下創建一個dimens.xml文件,定義各種字體的大小。那麼系統就會自動根據你手機屏幕的解析度去調用響應的文件夾。
另外,值得提醒的是,記得在你默認的values文件下的dimens.xml文件中也要寫上相應的字體大小哦,因為當系統無法認識你手機屏幕大小的時候,它會自動去找你默認文件中的
東西,沒有寫的話程序會崩潰。
************************************************************分割線************************************************************
在看下面內容之前首先請看你SDK文檔中以下這篇文章
其實google在解析度適應性的東西已經寫的很清楚了,只是我們很多人沒去看而已
以下是結論:
屏幕解析度:1024x600
density:1(160)
文件夾:values-mdpi-1024x600
屏幕解析度:1024x600
density:1.5(240)
文件夾:values-hdpi-683x400 由1024/1.5 600/1.5得到,需要四捨五入。
屏幕解析度:800x480
density:1(160)
文件夾:values-mdpi-800x480
屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-533x320 由800/1.5 480/1.5得到,需要四捨五入。
以此類推
一般情況下需要創建出values 、values-mdpi 、 values-hdpi文件夾,以備在一些沒有規定的尺寸屏幕上找不到資源的情況。
然後在裡面使用不同的dimens文件,Layout中不要使用顯示的數字,所有的尺寸定義全都援引dimens裡面的內容。
這樣能夠保證深度UI定製的情況
另外在工程的default.properties中如果split.density=false,則解析度適配的時候文件夾命名不需要與scale相除
例
屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-800x480
************************************************************分割線************************************************************
關於dimens
位置:res\values
單位:px Pixel 以畫面的像素為單位;
in Inches以畫面的多少英寸為單位;
mm Millimeter以畫面的多少毫米為單位;
pt Points 一點為1/72英寸;
dp或dip Density-indepentdent 為160dpi屏幕的一個pixel;
ap Scale-independent Pixels 隨屏幕尺寸改變的一個pixel;
1.drawable: 存放不同解析度對應圖片
在2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支持多解析度。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)
系統會根據機器的解析度來分別到這幾個文件夾裡面去找對應的圖片。
在2.1之前的版本可以通過drawable-800x480, drawable-480x320 等方式實現。
2:layout:放置對應不同解析度的布局
創建不同的layout文件夾, layout-800x480,layout-480x320, 系統會根據屏幕的大小自己選擇合適的layout進行使用。
另外:可以在res目錄下建立layout-port和layout-land兩個目錄,裡面分別放置豎屏和橫屏兩種布局文件。
下面列出主流的android機型有:
240x320低端,國產入門級採用,例如HTC G4,G8
320x480中端,大部分基於此解析度,例如HTC G1,G2,G3,G6, MOTO ME600, SAMSUNG I7500
480x800中高端,大部分基於此解析度,例如HTC G5,G7, MOTO MT810
480x854MOTO特有的,例如Droid, Milestone, XT800
960x640, 魅族M9
③ 如何讓Android自適應不同解析度或不同屏幕大小的layout布局
一:不同的layout
只需要在res目錄下創建不同的layout文件夾,比如layout-640x360,layout-800x480,所有的 layout文件在編譯之後都會寫入R.java里,而系統會根據屏幕的大小自己選擇合適的layout進 行使用。
二:hdpi、mdpi、ldpi
在之前的版本中,只有一個drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、 drawable-hdpi三個,這三個主要是為了支持多解析度。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)
系統會根據機器的解析度來分別到這幾個文件夾裡面去找對應的圖片。
④ 請問下,在Android中如何做到屏幕自動適配多種解析度,在res下建立不同解析度文件夾這個就免了,太復雜~
android 不同的密度下對應的像素是不同的,中密度是 1:1的關系,高密度是1:1.5,低密度是1:0.75。如果你的圖片默認是放在drawable里,那這是默認中密度下的,如果手機是高密度,就會把圖片拉伸1.5倍再顯示,這樣圖片可能會有失真的情況。
系統的圖片處理是在不同的密度下做成不同像素的圖片。比如:一張圖片 低密度下放入一張 36*36 ,中密度下是 48*48, 高密度下是64*64。
如果你只是背景圖片填充屏幕,你只要設置fill_parent就可以實現,但是你裡面的內容在不同的密度下就會顯示大小都不同, 如果裡面的內容不管是什麼密度下都要按照那個比例來的話(比如最上面是title,中間是內容,下面是底部懶,你想這個在不同的手機下都以1:9:1的比例顯示出來),那就可以設置layout_weight ,最外面Linearlayout 裡面的每個布局 的width設置為wrap_content,同時設置weight,這個數值要反過來設置,這樣就能保證在任何手機上都是以這個比例顯示內容。
其實也可以只做一套圖 放在中密度 或者高密度下 然後讓程序自己去拉伸。
如果需要設置大小,最好是在布局裡設置dip,這樣就能保證在不同的密度下顯示大小一樣,如果程序代碼里控制,代碼里控制的是px, 在不同的密度下就會顯示不同,以上是我自己研究的,如果不對請指出,一起討論
⑤ 為了使android適應不同解析度機型,布局時字體單位應用什麼,像素單位應用是什麼
字體用sp,控制項大小寬度用dp,但是控制項能用權重的話,布局會更好
⑥ Android界面布局怎麼樣適應不同解析度的手機
我一般都會使用相對布局,通過獲取手機的解析度以及計算控制項的寬高比例和控制項所處理想屏幕中所佔的比例來適配所有的手機,保證很復雜的圖片不會被拉伸壓縮導致變形扭曲。
⑦ android開發如何讓一個app自適應兩種解析度的屏幕
使用dp單位。LinearLayout中合理使用weight權重這個屬性。