• Stars
    star
    1,510
  • Rank 31,048 (Top 0.7 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 8 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🌏 WebView 全方面使用,JS交互、进度条、上传图片、错误页面、视频全屏播放、唤起原生App、获取网页源代码、被作为第三方浏览器打开、DeepLink、[腾讯x5使用示例]

ByWebView

JitPack API download

Features

  • 基本配置使用(宽度自适应、返回网页上一层、显示网页标题等)
  • 唤起三方应用(拨打电话、发送短信、发送邮件等)
  • 上传图片(版本兼容)
  • 错误页面处理
  • 全屏播放网络视频
  • 与Js交互实例
  • 优雅的进度条显示控件

Demo示例:

  • DeepLink的基本使用
  • 被作为第三方浏览器打开
  • 与ToolBar联动,自定义WebView
  • 腾讯x5使用示例

Document

Screenshots

bywebview

Download

引用

  1. Add the JitPack repository to your build file
allprojects {
   repositories {
   	...
   	maven { url 'https://jitpack.io' }
   }
}
  1. Add the dependency:
dependencies {
   implementation 'com.github.youlookwhat:ByWebView:1.2.1'
}

Use

byWebView = ByWebView
        .with(this)
        .setWebParent(container, new LinearLayout.LayoutParams(-1, -1))
        .useWebProgress(ContextCompat.getColor(this, R.color.coloRed))
        .loadUrl(mUrl);

与Js交互

  • 调用Js方法:
// 无参数调用
byWebView.getLoadJsHolder().quickCallJs("javacalljs");
// 传递参数调用
byWebView.getLoadJsHolder().quickCallJs("javacalljswithargs", "android传入到网页里的数据,有参");
  • Js调用Java方法:
ByWebView.with(this)
	.addJavascriptInterface("injectedObject", new MyJavascriptInterface(this))
	.loadUrl(mUrl);
window.injectedObject.startFunction()

生命周期处理

@Override
protected void onPause() {
    super.onPause();
    byWebView.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    byWebView.onResume();
}

@Override
protected void onDestroy() {
    byWebView.onDestroy();
    super.onDestroy();
}

返回操作

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (byWebView.handleKeyEvent(keyCode, event)) {
        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}

上传图片之后的回调

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    byWebView.handleFileChooser(requestCode, resultCode, intent);
}

监听 标题、进度条、WebViewClient

byWebView = ByWebView
        .with(this)
        .setWebParent(container, new LinearLayout.LayoutParams(-1, -1))
        .useWebProgress(ContextCompat.getColor(this, R.color.coloRed))
        .setOnTitleProgressCallback(onTitleProgressCallback)
        .setOnByWebClientCallback(onByWebClientCallback)
        .addJavascriptInterface("injectedObject", new MyJavascriptInterface(this))
        .loadUrl(mUrl);
private OnTitleProgressCallback onTitleProgressCallback = new OnTitleProgressCallback() {
    @Override
    public void onReceivedTitle(String title) {
        Log.e("---title", title);
    }

    @Override
    public void onProgressChanged(int newProgress) {
        // 返回的进度
    }

    @Override
    public boolean onHandleScreenOrientation(boolean isShow) {
        // 返回true,视频全屏时,横竖屏自己处理
        return false;
    }
};

private OnByWebClientCallback onByWebClientCallback = new OnByWebClientCallback() {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        
    }

    @Override
    public boolean onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        // 如果自己处理,需要返回true
        return super.onReceivedSslError(view, handler, error);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // 网页加载完成后的回调
    }

    @Override
    public boolean isOpenThirdApp(String url) {
        // 处理三方链接
        Log.e("---url", url);
        return ByWebTools.handleThirdApp(ByWebViewActivity.this, url);
    }
};

自定义错误页面

ByWebView.with(this)
	.setErrorLayout(R.layout.by_load_url_error,"无法打开网页")
	.loadUrl(mUrl);

完整设置

byWebView = ByWebView
        .with(this)
        .useWebProgress(true) // 是否使用进度条,默认true,如使用可不用配置
        .setWebParent(container, new LinearLayout.LayoutParams(-1, -1)) // 设置WebView父容器
        .useWebProgress("#ffb6cf", "#ff0000", 3)// 进度条渐变色(开始颜色,结束颜色,高度)
        .setOnTitleProgressCallback(onTitleProgressCallback)// title 和 progress 监听
        .setOnByWebClientCallback(onByWebClientCallback)    // WebViewClient监听
        .setErrorLayout(R.layout.by_load_url_error, "无法打开网页") // 设置错误页面及标题
        .addJavascriptInterface("injectedObject", new MyJavascriptInterface(this)) // 设置Js监听
        .loadUrl(mUrl);

Tip

  • 混淆时应加上(通过JS向网页传值,如不加有时候会传值失败):

    -keepattributes *Annotation*
    -keepattributes *JavascriptInterface*
    -keepclassmembers class * {
       @android.webkit.JavascriptInterface <methods>;
    }

Thanks

Other

More Repositories

1

CloudReader

🗡️ 云阅:一款基于网易云音乐UI,使用玩Android Api,Retrofit2 + RxJava2 + Room + MVVM-databinding架构开发的Android客户端
Java
4,937
star
2

DesignPattern

📚 Java 23种设计模式全归纳
Java
4,758
star
3

ByRecyclerView

🔥 RecyclerView 下拉刷新、上拉松手/自动加载更多、item点击/长按、item局部刷新、头布局/尾布局/状态布局、万能分割线、Skeleton骨架图、极简adapter、嵌套滑动置顶
Java
801
star
4

awesome-netease-cloudmusic

仿网易云音乐开源系列汇总
338
star
5

WebProgress

🎢 An Android WebView Progress Bar. 仿微信网页进度条。
Java
107
star
6

RichEditorView

Android 基于WebView的富文本编辑器 - 仿简书编辑器
Java
90
star
7

NeteaseMusicUI

🎵 仿网易云音乐歌单详情页 【已全新改写】
Java
81
star
8

CustomViewStudy

This repository is used to learn CustomView(Text、Image、Progress、ViewGroup、ViewGragHelper).
Java
76
star
9

BySMB

Android 通过SMB (Server Message Block),实现手机给电脑传输数据
Kotlin
75
star
10

SceneryView

🏜 The scenery is unique here~ 自定义View,圆、三角形、云朵,平移及旋转动画。
Java
36
star
11

ProjectPatternStudy

Android MVC、MVP、MVVM-databinding、MVP-databinding 架构单元示例
Java
34
star
12

ByBannerView

banner:右端缩进、左右露出、返回轮播、循环轮播
Java
27
star
13

ByAndroid

基于 mvp - databinding 框架,AndroidX、retrofit2、rxjava2、okhttp3、Glide、immersionbar、RxBus
Java
12
star
14

kotlin-learning

《Kotlin 实战》代码笔记
Kotlin
11
star
15

MaterialDesign

全面的Material Design控件效果,转场动画,集合系统自带的LoginActivity、ScrollingActivity、ListActivity等
Java
11
star
16

StickViewLayout

仿原京东商品详情页,上拉Tab置顶,可查看图文详情,参数详情,商品评论。
Java
11
star
17

Ideas-Swift

iOS 使用 Swift5 开发的想法记录App。包含:横竖屏、深色模式、一个Api使用等。
Swift
10
star
18

android-learning

项目例子:LV/RV adapter搭配ViewBinding使用示例、jni、控件集合、Lottie、AdMob、截图加水印、列表文本展开收起
Java
6
star
19

iOS-learning

《Swift5从零到精通iOS开发训练营》- 代码笔记
Swift
5
star
20

HarmoryOS-learning

HarmoryOS NEXT 学习笔记
TypeScript
4
star
21

Learning-resources-collect

学习资源收集
2
star
22

youlookwhat.github.io

youlookwhat's hexo homepage
HTML
2
star
23

download

各个库的示例apk下载
1
star