Android Market新产品:完全重新设计的Android Market,可以显示更多的屏幕截图,支持显示推广图片/文字,并新增运动、健康、主题和动漫4个分类。
手势支持新的SDK里面加入了一个GestureBuilder类,可以让开发者生成针对某个应用程序的手势库。
支持CDMA网络:中国电信的用户可以期待EVDO的Android手机了
TXT-2-speech:Donut新包含了由SVOX开发的Pico语音引擎,支持了更多语言的发音,包括英语、法语、德语、意大利语等。
快速搜索框:新加入了Quick Search Box(也叫Android Search),类似iPhone的Spotlight,可直接搜索括联系人,音乐,浏览历史,书签等手机内容。
全新的拍照界面:用户现在可以同一个界面中快速切换照相,摄像或画廊模式。Android开发团队表示新版相机程序启动速度快了39%,拍照间的延迟减少了28% 。
应用程序耗电查看:这下好了,哪个软件耗多少电,现在一见了然了,相信以后耗电量也会成为消费者选择软件的依据之一。
支持VPN:可以连接到基于pre-shared key或证书的L2TP/IPSEC,以及标准的L2TP/PPTP VPN网络。
其他:支持更多的屏幕分辨率,如WVGA,QVGA等。linux内核升级到2.6.29。支持OpenCore2媒体引擎。 新增面向视觉或听觉困难人群的易用性插件。
赶紧下下来体验体验,运行起来一看,新的模拟器的皮肤颜色居然和我Ubuntu的色调一致,还真般配。
前面几个特性现在所学有限,暂时用不着,就先试验一下最后一个WVGA的大屏吧。
1.6中有480×800和480×854的2个大屏,设备名称分别为WVGA800和WVGA854。
先建了一个WVGA800的设备,运行起来试验了一下。效果如下图所示。
屏幕果然超级大,不过从效果上来看,好像是把原来320×480拉伸成了480×800,字体和图标都大了许多,但有点模糊,显示的内容一点也没比以前多,只是放大了而已。这并不是真正意义的高分频。
想想Google应该不会拿个这样的高分屏出来糊弄人的,应该在那可以配置。
通过研究发现应该和LCD的显示密度有关系。在SDK安装包下的每个皮肤目录里面有一个hardware.ini,打开文件都有下面设置项。
- # skin-specific hardware values
- hw.lcd.density=XXX
其中QVGA、HVGA、WVGA对应的值分别为120、160、240。这个参数应该就是标识LCD的点阵密度的。数值越大,点越粗。
试验了一下QVGA的,显示内容和HVGA的一样,只不过全部缩小了。HVGA应该是一个基准,QVGA和WVGA分别在HVGA的基础上缩小、放大的效果。如果把WVGA的这个参数也改成160,点阵
密度应该就和HVGA保持一致了。
把这个值改成了160后重新创建了一个WVGA的AVD设备再次运行模拟器,果然正常了,见下图。
#p#
Idle的背景图无法覆盖整个桌面,上下会漏出黑色空区。
运行自带的API Demo试验一下,又出问题了,应用只显示了默认320×480的区域,没有占满全屏。如下图:
在Layout中都有设置下面2句,把最外层的宽和高设为fill_parent,应该能适应屏幕才对。不知道哪出问题了。
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
运行手机自带的那些应用显示都没有问题,新建立一个新的HelloWorld也都显示正常,如下图。
就是打开以前的例子和自带的例子有问题。应该还是应用本身哪的设置问题。
这个版本才出没几天,网上都没有相关资料,只能自己研究了。
后来在SDK中查到这样一段描述。
- <supports-screens android:smallScreens=["true"| "false"]
- android:normalScreens=["true" | "false"]
- android:largeScreens=["true" | "false"]
- android:anyDensity=["true" | "false"] />
supports-screens是加在AndroidManifest.xml文件中的,用来标识屏幕的类型。如果是WVGA,应该在该文件中添加下面语句:
supports-screens android:largeScreens="true"/>
再次编译运行,果然显示正常了。
按照SDK描述,设置anyDensity应该更好,这个参数能让应用适应各种屏幕。
但是在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.
这个参数在API Level 4也就是SDK 1.6以后才启用的,而且1.6版本建的API Level 4的应用默认值就是True,这也就是我刚才自己新建的HelloWorld没做任何处理就能显示正常的原因。
这个API Demo虽然是和1.6 SDK的包里面的,可能并不是在1.6的环境中新建的,所以版本号还是老的。
现在就得查看一下API Level的信息在哪。在每个新建的应用中会有下面2个地方描述Api Level,以Level 4为例:
一个是在AndroidManifest.xml文件的最后,
uses-sdk android:minSdkVersion="4"></uses-sdk>
该语句标识此例子允许的最低的API Level版本;
另一个地方在default.properties文件中,有如下语句:
target=android-4
看了一下API Demo工程,虽然API Demodefault.properties文件中target=android-4,但是AndroidManifest.xml文件中居然找不到最低Level的描述,可能是因为这个是早期就开发出来的例子,延续下来了。
把<uses-sdk android:minSdkVersion="4"></uses-sdk> 添加进去,并去掉之前添加的supports-screens属性,果然显示正常了。
看来这2个地方设置不正确,即使把anyDensity设为True,也不能让应用自适应屏幕规格。
1、创建不同分辨率的AVG设备
手机屏幕可以分为不同的尺寸,比如2寸、2.4寸、2.8寸,而且有不同的分辨率,例如QVGA(240×320),HVGA(320×480)。同一分辨率也可以有不同的尺寸。例如我们手机目前最常用的QVGA(240*320)大的有2.8寸甚至3寸屏屏的,小的才2寸频、2.2寸屏,虽然大小不同,但都是240×320。只是点阵的密度不同而已,大频的密度小,点的颗粒大; 小屏密度大,更加细腻。
如果按默认参数创建一个WVGA的屏幕,相当于从2寸屏的QVGA换成3寸屏的QVGA,只是显示的文字放大了而已。
只有通过修改hardware.ini文件中的hw.lcd.density参数控制屏幕的点阵密度,才能真正调整手机的分辨率,让手机屏幕显示更多的内容。理论上说,通过修改此参数可以得到各种不同点阵密度的屏幕。我试验改成120,果然显示图标显示更小了,能显示更多的内容。
本例里要想让WVGA屏幕真正体现800×480的分辨率,需要把此设备的density改成160。
2、让应用适应屏幕大小
在SDK1.6也就是API Level 4中无须任何处理,默认参数anyDensity=True可以自动帮我们处理了。
但是早期的版本需要分别通过largeScreens、smallScreens、normalScreens来设置屏幕规格才行。不过创建不同屏幕时如果保持默认的density不修改,相当于是在HVGA基础上进行缩放,也可以不设置此参数。
【编辑推荐】