webView的用法总结。

本文详细介绍 WebView 的多种使用方法,包括加载 URL、加载 HTML 代码、结合 WebViewClient 处理加载事件等。此外还介绍了如何在应用中嵌入 HTML,解决 CSS 样式加载问题。

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

1.引言

在平时项目中难免会用到webview,每次用都要百度,太麻烦了,趁着周末将webview常见的用法总结下。主要内容如下:

  • webview常见的几种用法。

  • 如何在app里面加入html

2.用法

2.1 webview加载url

webview跟我们平时用到的button,textview一样都需要在layout中声明,然后再activity findviewbyid,下面是我写的layout布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:orientation="vertical"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.lenovo.webviewtest.MainActivity"
    tools:showIn="@layout/activity_main">
    <Button
        android:id="@+id/button1"
        android:text="开始加载html"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <WebView
        android:layout_marginTop="10dp"
        android:id="@+id/testwebview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </WebView>
</LinearLayout>

主activity的代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button but;
    WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView=(WebView) findViewById(R.id.testwebview);
        but=(Button) findViewById(R.id.button1);
        but.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        webView.loadUrl("https://www.baidu.com");
    }
   }

这种方式的加载很简单。在这里就不贴图片了,只是简单介绍下。

2.2加载html代码

webview可以加载html代码,只需要把html的代码编程string类型,调用webview.loadDataWithBaseUrl(), 注意webview里面也有一个loadData()方法,这个和loadDataWithBaseUrl功能差不多,但是因为loadData 容易产生乱码,当时有中文的时候,因此最好使用loadDataWithBaseUrl。布局代码如上,在项目中添加assets文件。这个文件专门放 原生。不可更改 只可读取的资源。如图所示:我的assets文件。
这里写图片描述

读取assets文件,到String 类型的html代码,onclick核心代码如下:

     }
    @Override
    public void onClick(View v) {
        String s=null;
        StringBuffer buffer=new StringBuffer();
        InputStream str=null;
        try {
            str=getResources().getAssets().open("htmlducument/index.txt");//打开index.txt文件 获取流
        } catch (IOException e) {
            e.printStackTrace();
        }
        DataInputStream in=new DataInputStream(str);
        try {
            s=in.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (s!=null)
        {
            buffer.append(s);
            try {
                s=in.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if(null!=in)
        {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (null!=str)
        {
            try {
                str.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       webView.loadDataWithBaseURL(null,new String(buffer),"text/html","utf-8",null);
    }

在这里解释下loadDataWithBaseURL(String baseurl,String data,String mimetype,String encoding,String historyUrl)每个参数的意思。
baseurl:url地址,不过这里一般为null。
data:传入String 类型的html代码
mimetype:数据类型 这里是“text/html”
encoding:”utf-8”/”gbk”/”gb2132”
historyUrl:之前的url 一般设置成null

按照上面运行的结果如图所示:

这里写图片描述

下面的webview显示的是一趟数字,那是因为css 样式没加载出来。通过string来加载html 假如css样式是内置的话,可以,假如是外置的话,就行不通。百度也没搜索出结果来。通过这个方法来加载数据一般不采用。

2.3webview+webviewclient的使用,

这个很常见。 webviewclient是辅助webview处理各种时间回调,各种通知的,具体常见的 请求事件方法有:
onPageStarted :请求开始被调用.
onPageFinished : 页面加载完毕调用.
shouldOverrideUrlLoading : 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的.

核心代码如下:

   @Override
    public void onClick(View v) {
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);//能否调用js
        settings.setAllowFileAccess(false);//false的话 系统外的文件不能访问
        settings.setBuiltInZoomControls(true);//设置是否能用手来扩大缩小。true可以,false不行。默认的时false
        webView.requestFocusFromTouch();//如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。
        webView.loadUrl("http://blog.anycodes.cn/?cate=71");
        webView.setWebViewClient(new MyWebViewClient());
    }
    public class MyWebViewClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            //加载狂提示在这里进行
            Toast.makeText(MainActivity.this,"开始请求",Toast.LENGTH_SHORT).show();
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            //消除加载提示
            Toast.makeText(MainActivity.this,"请求结束",Toast.LENGTH_SHORT).show();
            super.onPageFinished(view, url);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webView.loadUrl(url);
            return true;
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //假如按返回键
        if (keyCode==KeyEvent.KEYCODE_BACK)
        {
            webView.goBack();
            return  true;
        }
        return super.onKeyDown(keyCode, event);
    }

运行结果如下:
这里写图片描述

onkeydown方法的重写目的是 当用户按下back键的时候,执行webview.goback()方法 返回上一层。

以上webview大概的用法都讲完了。

3.app中中嵌入html

在上面我们讲了。webview可以加载String类型的html代码。但是却不好加载css样式。实际上webview也可以加载 本地 url和加载 webclient不同但是 url的格式不一样。例如放在assets里面的 index.html和 css文件夹下的style.css
这里写图片描述

注意:在index.html 里面的css 引用路径要写正确否则无法加载正确。

更改的代码主要是loadurl:

 webView.loadUrl("file:///android_asset/htmlducment/index.html");

注意是: 是 3个 “/”
提示下: “../” 当前目录的上一层目录。 “./” 当前目录。
加载结果如图:
这里写图片描述

加载的效果非常好,以后wepapp会越来越流行,到时候开发android 会越来越简单,或许web程序员和android程序员 合二为一了。今天就写到这里。希望这篇博客能够帮到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值