WebView组件(对常规学习帮助不大,非详细解说)

自定义WebView组件与Intent的使用

使用鼠标点击按钮事件获得文本框内容跳转URL

步骤一、新建工程,如何配置在先前的安卓开发Android studio+gradle+Genymotion详细解说文章中已经说过了

步骤二、在string.xml中修改APPname

步骤三、清除activity_main.xml中的textview组件,并添加一个输入框组件EditView和一个提交按钮Button

由于是自适应布局,你拖动EditText组件和按钮组件进去之后会自动生成代码,如下:

<EditText
        android:id="@+id/editText"
        android:layout_width="239dp"
        android:layout_height="42dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        tools:layout_editor_absoluteX="60dp"
        tools:layout_editor_absoluteY="47dp"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        tools:layout_editor_absoluteX="307dp"
        tools:layout_editor_absoluteY="41dp"
        tools:ignore="MissingConstraints" />

你需要对代码块进行调整,如下:

<EditText
        android:id="@+id/editText"
        android:layout_width="239dp"
        android:layout_height="42dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="请输入网址"
        tools:layout_editor_absoluteX="60dp"
        tools:layout_editor_absoluteY="47dp"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="浏览"
        tools:layout_editor_absoluteX="307dp"
        tools:layout_editor_absoluteY="41dp"
        tools:ignore="MissingConstraints" />

步骤四:添加上和左边距,撑开容器:


步骤五、在模拟器中尝试运行
这里发生了一个net::ERR_NAME_NOT_RESOLVED错误,于是我添加了如下语句:

最后查询


URL过滤使用webView视图中打开

步骤一、添加过滤条件

//表明被启动Activity的action是查看操作数据
<action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT"/>
   //表明被启动Activity的category是制定该Activity能被浏览器安全调用
   <category android:name="android.intent.category.BROWSABLE"/>
   //表明被启动Activity的data部分的scheme只能是http/https开头
   <data android:scheme="http"></data>
   <data android:scheme="https"></data>

步骤二、layout添加webView组件

<WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/my_webView"
        ></WebView>

步骤三、添加java类和代码

package com.example.helloworld4;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;


import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = findViewById(R.id.my_webView);
        //true允许使用JavaScript脚本
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setAllowContentAccess(true);

        Intent intent = getIntent();
        Uri uri = intent.getData();//获取data属性
        String urlString = null;
        try {
            urlString = new URL(uri.getScheme(), uri.getHost(), uri.getPath()).toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        //在myWebView加载网页,用loadURL()
        webView.loadUrl(urlString);
        //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    view.loadUrl(request.getUrl().toString());
                } else {
                    view.loadUrl(request.toString());
                }
                return true;
            }
        });

    }

}

结果:

出现拦截项
这里需要注意的事,如果你没用另一个工程的查询按钮,使用本机原来的浏览器,会自动使用谷歌搜索跳转(会加很多前缀),国内和谷歌很多访问不了,所以最后容易出现错误,最好是建两个工程

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页