代码 > 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了。
现在居然越来越火,工作中碰到的越来越多,这是说明我没眼光么……
点击登录