代码 > phonegap/cordova解决android下viewport无效的问题

2016-02-22

环境:linux debiantesting,cordova 6.0.0,android sdk 23

今天公司有需要,拿cordova封装一个app,结果安卓浏览器一跑一口老血喷出来了,viewport无效。

赶紧一顿搜索,装插件,依旧蛋疼。

只能老实怕代码。

总的来说,问题是需要调用android sdk的WebSettings的setUseWideViewPort和setLoadWithOverviewMode方法。

对代码连蒙带爬,大概整理出了头绪。

大部分相关代码都在platforms\android\CordovaLib\src\org\apache\cordove下。

 

  • 实际代码由src\io\cordova\hellocordova\MainActivity做入口,继承自CordovaActivity
  • 核心代码由CordovaActivity实现。CordovaActivity的appview指向了CordovaActivity。
  • CordovaWebView是接口类,具体的业务逻辑都在CordovaWebViewImpl下。
  • 这个类是虚拟的,调用CordovaWebViewEngine这个借口来实现渲染。
  • 而CordovaWebViewEngine也是一个虚拟类,具体的是由engine下的SystemWebViewEngine来实现的。
  • 而SystemWebViewEngine有个public属性webview,是继承自android系统webview的SystemWebView。
  • 具体的webview可以由CordovaWebView的getview,调用SystemWebViewEngine方法取得。

 

好在我现在写代码也不怕麻烦,爬一串还算轻松……

具体修改肯定是修改src\io\cordova\hellocordova\MainActivity。

代码如下

package io.cordova.hellocordova;

import android.os.Bundle;
import org.apache.cordova.*;


import android.webkit.WebView;

public class MainActivity extends CordovaActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    loadUrl(launchUrl);
    // Set by <content src="index.html" /> in config.xml

    view=(WebView) this.appView.getView();
    view.getSettings().setUseWideViewPort(true);
    view.getSettings().setLoadWithOverviewMode(true);
   //Add By jarlyyn.http://blog.jarlyyn.com
}
}

 

然后 cordova run android 一下,真机跑一下,为了让第一页也起效,把给location夹在了setTimeout 0里。收工。

话说我最讨厌的语言依次就是PHP,Javascropt,Java了。

现在居然越来越火,工作中碰到的越来越多,这是说明我没眼光么……

点击登录