把WEBAPP打包成Android应用

论坛: 

利用WebView控件,加载指定的URL。注意AndroidManifest.xml文件中要声明网络访问权限,

<uses-permission
        android:name="android.permission.INTERNET" />

打开应用,发现超链接在浏览器中打开了,这不是我想要的效果。解决办法:通过定义一个WebViewClient的子类,重写shouldOverrideUrlLoading方法,使之在应用内打开超链接。

class webViewClient extends WebViewClient {
    //重写shouldOverrideUrlLoading方法,使点击链接后不使用浏览器打开。
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);   
        return true;
    }
}

return true 表示在应用内打开链接,然后在onCreate方法里通过调用WebView的setWebViewClient方法实现。

show = (WebView) findViewById(R.id.show);
        
//为WebView设置WebViewClient处理某些操作
show.setWebViewClient(new webViewClient());

WebAPP中一般会用到javascript,如何让Web Android应用支持js呢?
1
2
   
//支持js
show.getSettings().setJavaScriptEnabled(true);

去掉应用顶部的标题栏
1
2
   
requestWindowFeature(Window.FEATURE_NO_TITLE);// 填充标题栏
setContentView(R.layout.main);

第一行代码一定要卸载setContentView前面,不能先渲染界面。

最后发现,点击android手机自带的返回键,并没有上线上一个界面,而是回到主屏了。通过重载onKeyDown方法判定是否按下返回键,然后调用goBack()方法,与js的history.back()类似。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && show.canGoBack()) {
        show.goBack();// 返回前一个页面
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

启动Activity类全部代码如下:
package cc.yunb.huoban;
 
import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.Window;
import android.view.KeyEvent;
 
public class MainActivity extends Activity {
    
    WebView show;
    final String url = "http://www.dsjz.cn?m=public&a=index";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 填充标题栏
        setContentView(R.layout.main);
        
        this.initView();
    }
 
    private void initView() {
        show = (WebView) findViewById(R.id.show);
        
        //为WebView设置WebViewClient处理某些操作
        show.setWebViewClient(new webViewClient());
        
        //支持js
        show.getSettings().setJavaScriptEnabled(true);
 
        //加载地址
        show.loadUrl(url);
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && show.canGoBack()) {
            show.goBack();// 返回前一个页面
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    class webViewClient extends WebViewClient {
        //重写shouldOverrideUrlLoading方法,使点击链接后不使用浏览器打开。
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);   
            return true;
        }
    }
 
}

Tags: