android webView使用

本文详细介绍如何在Android应用中使用WebView组件加载网页及本地资源,并介绍了如何配置WebSettings以支持JavaScript、网页缩放等功能,还提供了如何处理WebView的返回操作及自定义警告框的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 

一、使用WebView

1.加入权限

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

2.创建一个webView

通过布局

  <WebView
            android:id="@+id/webkit"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
xml创建webview

或则直接在代码中创建

WebView webView=new WebView(this);

3.通过WebViewClient加载

mWebView.setWebViewClient(new WebViewClient(){       
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                        view.loadUrl(url);       
                        return true;       
                    }       
        });   

4.辅助类WebSettings

通过browser.getSettings()获取WebSettings

a)可以集成对JS的脚本支持

 browser.getSettings().setJavaScriptEnabled(true);

b)对网页的缩放

browser.getSettings().setSupportZoom(true);//网页缩放

对于android4.0版本(4.1是否存在,有待研究)上述方式是不能够实现的

需要继续加入代码

browser.getSettings().setBuiltInZoomControls(true);
                browser.getSettings().setDefaultZoom(ZoomDensity.CLOSE);//默认缩放模式
                browser.setInitialScale(100);

5.加载本地资源assert目录下文件

browser.loadUrl("file:///android_asset/testChart.html");

6.对于返回的控制

重写WebViewClient的onKeyDown方法

public boolean onKeyDown(int keyCode, KeyEvent event) {       
           if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {       
                browser.goBack();       
                       return true;       
            }    
            return super.onKeyDown(keyCode, event);       
        }   

 7.加入对JS的调用

<script language="javascript">
        /* This function is invoked by the activity */
        function wave() {
            alert("1");
           // document.getElementById("droid").src="android_waving.png";
            alert("2");
        }
    </script>
    <body>
        <!-- Calls into the javascript interface for the activity -->
        <a onClick="window.demo.clickOnAndroid()"><div style="width:80px;
            margin:0px auto;
            padding:10px;
            text-align:center;
            border:2px solid #202020;" >
                Click me!
        </div></a>
    </body>
   mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

  final class DemoJavaScriptInterface {

            DemoJavaScriptInterface() {
            }

            /**
             * This is not called on the UI thread. Post a runnable to invoke
             * loadUrl on the UI thread.
             */
            public void clickOnAndroid() {
                mHandler.post(new Runnable() {
                    public void run() {
                        mWebView.loadUrl("javascript:wave()");
                    }
                });

            }
        }

ps:貌似android2.3版本会有VM aborting的问题。

如果需要调用alert的话,需要重写WebChromeClient

mWebView.setWebChromeClient(new MyWebChromeClient());

 final class MyWebChromeClient extends WebChromeClient {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               /* Log.d(LOG_TAG, message);
                result.confirm();
                return true;*/
                return super.onJsAlert(view, url, message, result);
            }
        }

当然我们也可以捕获alert的内容,然后进行重写

mWebView.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    AlertDialog.Builder b2 = new AlertDialog.Builder(MainActivity.this)
                            .setTitle("alert title").setMessage(message)
                            .setPositiveButton("ok",
                                    new AlertDialog.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog,
                                                int which) {
                                            result.confirm();
                                            // MyWebView.this.finish();
                                        }
                                    });

                    b2.setCancelable(false);
                    b2.create();
                    b2.show();
                    return true;
                }
            });

感谢vanekey兄的大力支持

更多移步这里:

https://code.google.com/p/android/issues/detail?id=12987

http://stackoverflow.com/questions/10104265/android-webview-javascript-doesnt-fire-the-call-back-function

http://www.linuxidc.com/Linux/2011-05/35782.htm

 

 

 

 

转载于:https://www.cnblogs.com/draem0507/archive/2013/06/10/3130613.html

### Android WebView 使用教程 #### 什么是 WebView? `WebView` 是 Android 提供的一个控件,用于在应用内部加载和展示网页内容。它允许开发者嵌入 HTML 页面到应用程序中,并支持 JavaScript 和 CSS 的执行。 --- #### 基本初始化与配置 要使用 `WebView`,首先需要在布局文件中定义该组件: ```xml <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 接着,在 Activity 或 Fragment 中获取并初始化 `WebView` 实例: ```java import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); // 启用JavaScript支持 WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); // 加载URL webView.loadUrl("https://www.example.com"); } } ``` 上述代码展示了如何启用 JavaScript 支持以及加载指定 URL[^1]。 --- #### 数据提交 (POST 请求) 如果需要通过 POST 方法向服务器发送数据,则可以使用以下方式: ```java String postData = "username=admin&password=secret"; webView.postUrl("https://example.com/login", EncodingUtils.getBytes(postData, "base64")); ``` 注意:这里的数据编码应遵循目标服务端的要求[^2]。 --- #### 处理 Cookies 为了处理 cookies,可以通过 `CookieManager` 设置或读取 cookie: ```java import android.webkit.CookieManager; // 添加Cookie CookieManager.getInstance().setCookie("https://example.com", "name=value"); // 获取所有Cookies String allCookies = CookieManager.getInstance().getCookie("https://example.com"); System.out.println(allCookies); ``` 此部分操作有助于保持用户的登录状态或其他个性化设置。 --- #### 清除缓存与历史记录 当用户退出或者切换账户时,可能需要清理 WebView 缓存及相关信息: ```java // 清楚缓存 webView.clearCache(true); // 删除历史记录 webView.clearHistory(); // 移除基本认证凭证 webView.removeJavascriptInterface("interfaceName"); // 如果存在敏感数据存储需求,可进一步调用清除函数 webView.clearFormData(); ``` 需要注意的是,移除 Java 对象接口可能会因不同版本的 Android 而表现不一致^。 --- #### 高级特性 除了基础功能外,`WebView` 还具备更多高级选项,比如手势识别、离线浏览模式等。这些都可以通过调整其设置来实现[^4]: ```java WebSettings webSettings = webView.getSettings(); webSettings.setDomStorageEnabled(true); // 开启DOM storage API webSettings.setDatabaseEnabled(true); // 允许数据库API webSettings.setAppCacheEnabled(true); // 启动应用缓存 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 自适应屏幕宽度 ``` 然而值得注意的一点是,对于 H5 AJAX 请求无法直接拦截修改响应头等内容[^5]。因此某些场景下需借助外部工具完成更复杂的交互逻辑。 --- ### 总结 以上介绍了关于 Android 平台下的 WebView 组件的基础运用技巧及其扩展能力。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值