Android SDK 1.6 WVGA大屏AVD配置詳解
Android Market新產(chǎn)品:完全重新設(shè)計的Android Market,可以顯示更多的屏幕截圖,支持顯示推廣圖片/文字,并新增運(yùn)動、健康、主題和動漫4個分類。
手勢支持新的SDK里面加入了一個GestureBuilder類,可以讓開發(fā)者生成針對某個應(yīng)用程序的手勢庫。
支持CDMA網(wǎng)絡(luò):中國電信的用戶可以期待EVDO的Android手機(jī)了
TXT-2-speech:Donut新包含了由SVOX開發(fā)的Pico語音引擎,支持了更多語言的發(fā)音,包括英語、法語、德語、意大利語等。
快速搜索框:新加入了Quick Search Box(也叫Android Search),類似iPhone的Spotlight,可直接搜索括聯(lián)系人,音樂,瀏覽歷史,書簽等手機(jī)內(nèi)容。
全新的拍照界面:用戶現(xiàn)在可以同一個界面中快速切換照相,攝像或畫廊模式。Android開發(fā)團(tuán)隊表示新版相機(jī)程序啟動速度快了39%,拍照間的延遲減少了28% 。
應(yīng)用程序耗電查看:這下好了,哪個軟件耗多少電,現(xiàn)在一見了然了,相信以后耗電量也會成為消費(fèi)者選擇軟件的依據(jù)之一。
支持VPN:可以連接到基于pre-shared key或證書的L2TP/IPSEC,以及標(biāo)準(zhǔn)的L2TP/PPTP VPN網(wǎng)絡(luò)。
其他:支持更多的屏幕分辨率,如WVGA,QVGA等。linux內(nèi)核升級到2.6.29。支持OpenCore2媒體引擎。 新增面向視覺或聽覺困難人群的易用性插件。
趕緊下下來體驗體驗,運(yùn)行起來一看,新的模擬器的皮膚顏色居然和我Ubuntu的色調(diào)一致,還真般配。
前面幾個特性現(xiàn)在所學(xué)有限,暫時用不著,就先試驗一下最后一個WVGA的大屏吧。
1.6中有480×800和480×854的2個大屏,設(shè)備名稱分別為WVGA800和WVGA854。
先建了一個WVGA800的設(shè)備,運(yùn)行起來試驗了一下。效果如下圖所示。
屏幕果然超級大,不過從效果上來看,好像是把原來320×480拉伸成了480×800,字體和圖標(biāo)都大了許多,但有點(diǎn)模糊,顯示的內(nèi)容一點(diǎn)也沒比以前多,只是放大了而已。這并不是真正意義的高分頻。
想想Google應(yīng)該不會拿個這樣的高分屏出來糊弄人的,應(yīng)該在那可以配置。
通過研究發(fā)現(xiàn)應(yīng)該和LCD的顯示密度有關(guān)系。在SDK安裝包下的每個皮膚目錄里面有一個hardware.ini,打開文件都有下面設(shè)置項。
- # skin-specific hardware values
- hw.lcd.density=XXX
其中QVGA、HVGA、WVGA對應(yīng)的值分別為120、160、240。這個參數(shù)應(yīng)該就是標(biāo)識LCD的點(diǎn)陣密度的。數(shù)值越大,點(diǎn)越粗。
試驗了一下QVGA的,顯示內(nèi)容和HVGA的一樣,只不過全部縮小了。HVGA應(yīng)該是一個基準(zhǔn),QVGA和WVGA分別在HVGA的基礎(chǔ)上縮小、放大的效果。如果把WVGA的這個參數(shù)也改成160,點(diǎn)陣
密度應(yīng)該就和HVGA保持一致了。
把這個值改成了160后重新創(chuàng)建了一個WVGA的AVD設(shè)備再次運(yùn)行模擬器,果然正常了,見下圖。
#p#
Idle的背景圖無法覆蓋整個桌面,上下會漏出黑色空區(qū)。
運(yùn)行自帶的API Demo試驗一下,又出問題了,應(yīng)用只顯示了默認(rèn)320×480的區(qū)域,沒有占滿全屏。如下圖:
在Layout中都有設(shè)置下面2句,把最外層的寬和高設(shè)為fill_parent,應(yīng)該能適應(yīng)屏幕才對。不知道哪出問題了。
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
運(yùn)行手機(jī)自帶的那些應(yīng)用顯示都沒有問題,新建立一個新的HelloWorld也都顯示正常,如下圖。
就是打開以前的例子和自帶的例子有問題。應(yīng)該還是應(yīng)用本身哪的設(shè)置問題。
這個版本才出沒幾天,網(wǎng)上都沒有相關(guān)資料,只能自己研究了。
后來在SDK中查到這樣一段描述。
- <supports-screens android:smallScreens=["true"| "false"]
- android:normalScreens=["true" | "false"]
- android:largeScreens=["true" | "false"]
- android:anyDensity=["true" | "false"] />
supports-screens是加在AndroidManifest.xml文件中的,用來標(biāo)識屏幕的類型。如果是WVGA,應(yīng)該在該文件中添加下面語句:
supports-screens android:largeScreens="true"/>
再次編譯運(yùn)行,果然顯示正常了。
按照SDK描述,設(shè)置anyDensity應(yīng)該更好,這個參數(shù)能讓應(yīng)用適應(yīng)各種屏幕。
但是在API Demo中添加 <supports-screens android:anyDensity="true"/> 以后又和之前一樣,屏幕只占一部分。
查看剛才的SDK文檔,后面對描述如下:
android:anyDensityIndicates whether the application can accommodate any screen density. Older applications (pre API Level 4) are assumed unable to accomodate all densities and this is "false" by default. Applications using API Level 4 or higher are assumed able to and this is "true" by default. You can explicitly supply your abilities here.
這個參數(shù)在API Level 4也就是SDK 1.6以后才啟用的,而且1.6版本建的API Level 4的應(yīng)用默認(rèn)值就是True,這也就是我剛才自己新建的HelloWorld沒做任何處理就能顯示正常的原因。
這個API Demo雖然是和1.6 SDK的包里面的,可能并不是在1.6的環(huán)境中新建的,所以版本號還是老的。
現(xiàn)在就得查看一下API Level的信息在哪。在每個新建的應(yīng)用中會有下面2個地方描述Api Level,以Level 4為例:
一個是在AndroidManifest.xml文件的最后,
uses-sdk android:minSdkVersion="4"></uses-sdk>
該語句標(biāo)識此例子允許的最低的API Level版本;
另一個地方在default.properties文件中,有如下語句:
target=android-4
看了一下API Demo工程,雖然API Demodefault.properties文件中target=android-4,但是AndroidManifest.xml文件中居然找不到最低Level的描述,可能是因為這個是早期就開發(fā)出來的例子,延續(xù)下來了。
把<uses-sdk android:minSdkVersion="4"></uses-sdk> 添加進(jìn)去,并去掉之前添加的supports-screens屬性,果然顯示正常了。
看來這2個地方設(shè)置不正確,即使把a(bǔ)nyDensity設(shè)為True,也不能讓應(yīng)用自適應(yīng)屏幕規(guī)格。
1、創(chuàng)建不同分辨率的AVG設(shè)備
手機(jī)屏幕可以分為不同的尺寸,比如2寸、2.4寸、2.8寸,而且有不同的分辨率,例如QVGA(240×320),HVGA(320×480)。同一分辨率也可以有不同的尺寸。例如我們手機(jī)目前最常用的QVGA(240*320)大的有2.8寸甚至3寸屏屏的,小的才2寸頻、2.2寸屏,雖然大小不同,但都是240×320。只是點(diǎn)陣的密度不同而已,大頻的密度小,點(diǎn)的顆粒大; 小屏密度大,更加細(xì)膩。
如果按默認(rèn)參數(shù)創(chuàng)建一個WVGA的屏幕,相當(dāng)于從2寸屏的QVGA換成3寸屏的QVGA,只是顯示的文字放大了而已。
只有通過修改hardware.ini文件中的hw.lcd.density參數(shù)控制屏幕的點(diǎn)陣密度,才能真正調(diào)整手機(jī)的分辨率,讓手機(jī)屏幕顯示更多的內(nèi)容。理論上說,通過修改此參數(shù)可以得到各種不同點(diǎn)陣密度的屏幕。我試驗改成120,果然顯示圖標(biāo)顯示更小了,能顯示更多的內(nèi)容。
本例里要想讓W(xué)VGA屏幕真正體現(xiàn)800×480的分辨率,需要把此設(shè)備的density改成160。
2、讓應(yīng)用適應(yīng)屏幕大小
在SDK1.6也就是API Level 4中無須任何處理,默認(rèn)參數(shù)anyDensity=True可以自動幫我們處理了。
但是早期的版本需要分別通過largeScreens、smallScreens、normalScreens來設(shè)置屏幕規(guī)格才行。不過創(chuàng)建不同屏幕時如果保持默認(rèn)的density不修改,相當(dāng)于是在HVGA基礎(chǔ)上進(jìn)行縮放,也可以不設(shè)置此參數(shù)。
【編輯推薦】
編程Android手機(jī)系統(tǒng)環(huán)境介紹