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