android2.2中默认浏览器无法使用手势放大缩小页面的问题定位

测试部提出一个产品bug,说是android默认的浏览器无法使用手势缩放页面,确实比较奇怪,这点android默认就是支持的,纠察原因时比较幸运,在WebView.java中发现了这个函数:

 

 

  1. void updateMultiTouchSupport(Context context) {  
  2.     WebSettings settings = getSettings();  
  3.     mSupportMultiTouch = context.getPackageManager().hasSystemFeature(  
  4.             PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)  
  5.             && settings.supportZoom() && settings.getBuiltInZoomControls();  
  6.     if (mSupportMultiTouch && (mScaleDetector == null)) {  
  7.         mScaleDetector = new ScaleGestureDetector(context,  
  8.                 new ScaleDetectorListener());  
  9.     } else if (!mSupportMultiTouch && (mScaleDetector != null)) {  
  10.         mScaleDetector = null;  
  11.     }  
  12. }  

 

似乎和手势有这密切的关系:

ScaleGestureDetector类中有三个方法,onScale,onScaleBegin,onScaleEnd分别实现了手势测量中,手势测量开始和手势测量结束。

另外,updateZoomButtonsEnabled中       

               mSupportMultiTouch = context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)
                && settings.supportZoom() && settings.getBuiltInZoomControls();

确定了是否创建并使用手势识别的条件:

1、拥有系统属性:FEATURE_TOUCHSCREEN_MULTITOUCH(即:android.hardware.touchscreen.multitouch)

       “android.hardware.touchscreen.multitouch”在frameworks/base/data/etc/中定义,只要任何一个xml文件中有

        <feature name="android.hardware.touchscreen.multitouch" />

     一行即可,原因是:

   PackageManagerService.java中会遍历目录/system//etc/permission/中的所有文件,然后通过readPermissionsFromXml()将

   feature 属性读入FeatureInfo,

   然后从hasSystemFeature(FEATURE_TOUCHSCREEN_MULTITOUCH)判断该属性是否存在。

       

2、WebSettings中:mSupportZoom=true;mBuiltInZoomControls=true

     默认情况mSupportZoom=true,mBuiltInZoomControls=false,所以,浏览器打开时要使用setBuiltInZoomControls(true),打开该功能,在TabControl::createNewWebView()有w.getSettings().setBuiltInZoomControls(true);对此做了设置,保险起见可以再设置setSupportZoom(true)。

 

posted @ 2012-02-11 14:47  h3c  阅读(462)  评论(0编辑  收藏  举报