在做應(yīng)用時(shí)發(fā)現(xiàn)程序沒有屏幕自適應(yīng)功能,變換手機(jī)使用之后,界面就很混亂了,字體也很奇怪。經(jīng)過百度的幫助,找到自適應(yīng)方法。
1??????????字體的自適應(yīng)
這里又有關(guān)于Android下表示大小的單位的相關(guān)知識(shí)。
下面列出幾種表示單位:
1.1?????dip: device independent pixels(設(shè)備獨(dú)立像素). 不同設(shè)備有不同的顯示效果,這個(gè)和設(shè)備硬件有關(guān),一般我們?yōu)榱酥С諻VGA、HVGA和QVGA (WVGA=800x480,HVGA=480x320, QVGA=320x240)推薦使用這個(gè),不依賴像素。
1.2?????px: pixels(像素). 不同設(shè)備顯示效果相同,一般我們HVGA代表320x480像素,這個(gè)用的比較多。
1.3????pt: point,是一個(gè)標(biāo)準(zhǔn)的長度單位,1pt=1/72英寸,用于印刷業(yè),非常簡單易用;
1.4????sp: scaled pixels(放大像素). 主要用于字體顯示best for textsize??梢愿鶕?jù)用戶的字體大小首選項(xiàng)進(jìn)行縮放
根據(jù)上面對(duì)單位的分析,使用sp為單位就可以實(shí)現(xiàn)自適應(yīng)字體大小啦。親測,比較好用。
在你的res文件夾中創(chuàng)建一個(gè)文件夾,叫做values-320x240。其中320x240是你手機(jī)屏幕的分辨率,根據(jù)你手機(jī)屏幕的情況做不同的命名,例如values-800x480。在該文件夾下創(chuàng)建一個(gè)dimens.xml文件,定義各種字體的大小。那么系統(tǒng)就會(huì)自動(dòng)根據(jù)你手機(jī)屏幕的分辨率去調(diào)用響應(yīng)的文件夾。
另外,值得提醒的是,記得在你默認(rèn)的values文件下的dimens.xml文件中也要寫上相應(yīng)的字體大小哦,因?yàn)楫?dāng)系統(tǒng)無法認(rèn)識(shí)你手機(jī)屏幕大小的時(shí)候,它會(huì)自動(dòng)去找你默認(rèn)文件中的東西,沒有寫的話程序會(huì)崩潰。
2??????????布局自適應(yīng)
下面的介紹,就是今天讓我?guī)锥茸タ竦臇|西。
首先先介紹百度告知的幾種自適應(yīng)的方法:
2.1?????????不同的layout
Android手機(jī)屏幕大小不一,有480x320,640x360, 800x480,854x480.怎樣才能讓App自動(dòng)適應(yīng)不同的屏幕呢??其實(shí)很簡單,只需要在res目錄下創(chuàng)建不同的layout文件夾,比如layout-640x360,layout-800x480,所有的layout文件在編譯之后都會(huì)寫入R.java里,而系統(tǒng)會(huì)根據(jù)屏幕的大小自己選擇合適的layout進(jìn)行使用。?但是需要注意的是根據(jù)分辨率添加layout文件時(shí),layout這個(gè)原來的文件夾及資源一定要存在,否則會(huì)出現(xiàn)錯(cuò)誤。同時(shí)在命名layout文件夾時(shí),必須遵守這樣的規(guī)則.layout-640x360 大數(shù)放在小數(shù)的前面,否則會(huì)報(bào)錯(cuò)。下圖為需要定義的文件夾和文件:
drawable-hdpi、drawable-mdpi、drawable-ldpi的區(qū)別:?
(1)drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)?
(2)drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480)?
(3)drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320)?
備注:三者的解析度不一樣,就像你把電腦的分辨率調(diào)低,圖片會(huì)變大一樣,反之分辨率高,圖片縮小。
2.2?????????利用weight屬性
保證頁面的布局隨著屏幕的大小變化而變化,最好使用相對(duì)布局方式,少使用絕對(duì)賦值。
將你控件的layout中的width、height設(shè)置為fill-parent,不要使用wrap——content。因?yàn)閣rap-content的大小是不固定的。而weight(權(quán)重)這個(gè)屬性很好的解決了這個(gè)問題。當(dāng)包裹在控件外面的Layout的width、height屬性都設(shè)置為fill-parent時(shí),可以利用weight的反比特性。即如果控件A設(shè)置weight為9,控件B設(shè)置weight為20,那么A所占的空間為20/(9+20),B所占的空間為9/(9+20)。這樣的反比屬性對(duì)任何分辨率下的手機(jī)都是合適的。
這種方法雖然解決了自適應(yīng)問題,但是在我使用的時(shí)候發(fā)現(xiàn)我有需要使用wrap_content屬性的時(shí)候,就會(huì)出現(xiàn)layout無法填滿的現(xiàn)象。(也有可能是我的布局有問題)。
2.3?????????在程序中制定
獲得屏幕的大小,在程序中設(shè)置height和width屬性。
//得到屏幕的高度
Int heigh = (Activity)m_context).getWindowManager().getDefaultDisplay().getHeight();
textview.setHeight((int)( heigh /14);
這種方法感覺不太適合復(fù)雜布局,但是我正在編寫的應(yīng)用時(shí)夠了~
以上各種總結(jié)可能會(huì)有錯(cuò)誤,以后發(fā)現(xiàn)會(huì)積極改正。
電子發(fā)燒友App







評(píng)論