说明:由于本人是个小白,可能这个方法很多大佬都会,但是对于我们小白来说,有的时候一个问题要找好久还不一定能找到。。。拿这个来说,我找了好久都没有找到答案,最后机缘巧合下,才完成的。。。
创建Fragment过程就不说了,直接进入正题。因为加载网页需要用到webview组件,那我们首先在layout中创建一个,我这里以默认的fragment_gallery为代表。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.gallery.GalleryFragment">
<WebView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/web123"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
因为webview需要使用网络权限及用到的http或者https,我们需要在AndroidManifest中定义。加载http/https用到的是 android:usesCleartextTraffic=”true 其他的都是常用的权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.Hookvip"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.Hookvip.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>
接下来我们需要在GalleryFragment.java 中去实现webview,并且实现在app内下载.apk文件自动调用系统浏览器进行下载。
package com.vip.hookvip.ui.gallery;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.vip.hookvip.databinding.FragmentGalleryBinding;
public class GalleryFragment extends Fragment {
private FragmentGalleryBinding binding;
@SuppressLint("SetJavaScriptEnabled")
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
new ViewModelProvider(this).get(GalleryViewModel.class);
binding = FragmentGalleryBinding.inflate(inflater, container, false);
View root = binding.getRoot();
//定义webviewID
final WebView webView = binding.web123;
//允许加载JavaScript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
//定义下载动作
webView.setDownloadListener(new MyWebViewDownLoadListener());
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
//加载外部网页
webView.loadUrl("https://wwif.lanzouw.com/b00tr891a");
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
//实现WebView中下载问题
private class MyWebViewDownLoadListener implements DownloadListener {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
}
好了,本次教程到此结束。
版权声明:本文为weixin_43169336原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。