前段时间比较忙,没有来得及写完如何将X5WEBVIEW分享功能和缓存功能屏蔽,下面直接来干货,上代码。

1.首先在布局文件中增加一个全屏的布局,

 <!-- 视频全屏-->
<FrameLayout
android:id="@+id/video_fullView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black"
android:visibility="gone"> </FrameLayout>

2.其次初始化x5webview的时候务必要配置为标准全屏

if (webView.getX5WebViewExtension() != null) {
Bundle data = new Bundle();
data.putBoolean("standardFullScreen", true);// true表示标准全屏,false表示X5全屏;不设置默认false,
data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,
data.putInt("DefaultVideoScreen", 1);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1
webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
}

3.设置进入和退出全屏的事件

            // 拦截全屏调用的方法
@Override
public void onShowCustomView(View view, IX5WebChromeClient.CustomViewCallback callback) {
super.onShowCustomView(view, callback);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
webView.setVisibility(View.INVISIBLE);
// 如果一个视图已经存在,那么立刻终止并新建一个
if (xCustomView != null) {
callback.onCustomViewHidden();
return;
}
try {
            //下面为了兼容部分手机顶部白色区域块
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
view.setVisibility(View.VISIBLE);
video_fullView.addView(view);
            
xCustomView = view;
xCustomView.setVisibility(View.VISIBLE);
xCustomViewCallback = callback;
video_fullView.setVisibility(View.VISIBLE);
//下面切勿改动,如果x5webview出现改动,下面代码将不能生效,需要重新分析, if(view instanceof ViewGroup && ((ViewGroup) view).getChildCount() > 1){
View root_child1 = (((ViewGroup) view).getChildAt(1));
if(root_child1 instanceof ViewGroup && ((ViewGroup) root_child1).getChildCount() > 2){
View root_child1_child1 = ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(1)));
View root_child1_child2 = ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)));
if(root_child1_child1 instanceof ViewGroup && ((ViewGroup) root_child1_child1).getChildCount() > 1){
View root_child1_child1_child1 = (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(1)))).getChildAt(1));
if(root_child1_child1_child1 instanceof ViewGroup && ((ViewGroup) root_child1_child1_child1).getChildCount() > 5){
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(1)))).getChildAt(1))).getChildAt(3).setVisibility(View.GONE);
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(1)))).getChildAt(1))).getChildAt(5).setVisibility(View.GONE);
}
}
if(root_child1_child2 instanceof ViewGroup && ((ViewGroup) root_child1_child2).getChildCount() > 1){
View root_child1_child2_child1 = (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(1));
if(root_child1_child2_child1 instanceof ViewGroup && ((ViewGroup) root_child1_child2_child1).getChildCount() > 5){
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(1))).getChildAt(3).setVisibility(View.GONE);
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(1))).getChildAt(5).setVisibility(View.GONE);
}
}
//处理x5webview播放器上横竖屏按钮事件
View root_child1_child3 = ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(3)));
if(root_child1_child3 instanceof ViewGroup && ((ViewGroup) root_child1_child3).getChildCount() > 0){
View root_child1_child3_child0 = (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(3)))).getChildAt(0));
if(root_child1_child3_child0 instanceof ViewGroup && ((ViewGroup) root_child1_child3_child0).getChildCount() > 4){
((ViewGroup) root_child1_child3_child0).getChildAt(4).setVisibility(View.INVISIBLE);
((ViewGroup) root_child1_child3_child0).getChildAt(4).setEnabled(false);
((ViewGroup) root_child1_child3_child0).getChildAt(4).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} }
});
}
}
                 //处理x5webview播放器上横竖屏按钮事件
if(root_child1_child2 instanceof ViewGroup && ((ViewGroup) root_child1_child2).getChildCount() > 1){
View root_child1_child2_child0 = (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(0));
if(root_child1_child2_child0 instanceof ViewGroup && ((ViewGroup) root_child1_child2_child0).getChildCount() > 4){
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(0))).getChildAt(4).setVisibility(View.INVISIBLE);
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(0))).getChildAt(4).setEnabled(false);
((ViewGroup) (((ViewGroup) ((((ViewGroup) (((ViewGroup) view).getChildAt(1))).getChildAt(2)))).getChildAt(0))).getChildAt(4).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
});
}
}
}
}
} catch (Exception exception) {
exception.printStackTrace();
} finally {
}
} @Override
public void onHideCustomView() {
super.onHideCustomView();
if (xCustomView == null) {
// 不是全屏播放状态
return;
}try {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
StatusBarCompat.setStatusBarColor(NewsContentViewActivityV3.this, getResources().getColor(R.color.article_statusbar));
xCustomView.setVisibility(View.GONE);
video_fullView.removeView(xCustomView);
xCustomView = null;
video_fullView.setVisibility(View.GONE);
xCustomViewCallback.onCustomViewHidden();
webView.setVisibility(View.VISIBLE);
} catch (Exception exception) {
exception.printStackTrace();
} finally {
}
}

主要的思路:使用自定义全屏,可以监听到进入和退出全屏的事件,并且拿到对应的view,这样就可以进行相关的处理。并且通过对x5webview内核的分析,可以精准对相关的按钮和动作进行设置,屏蔽比如分享和缓存功能,按照需要可以添加横竖屏的相应动作。

总结:如果x5webview本身就处理好了标准全屏,就没我们啥事了。

X5webview完美去掉分享功能和缓存功能(2)的更多相关文章

  1. X5webview去掉分享功能和缓存功能

    x5webview比原生的webview适配更好,加载更快,对音视频的兼容性更好,具备独特的优势 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使 ...

  2. Nginx 之四: Nginx服务器的压缩功能和缓存功能

    在Nginx服务器配置文件中可以通过配置Gzip的使用,可以配置在http块,server 块或者location块中设置,Nginx服务器可以通过ngx_http_gzip_module模块.ngx ...

  3. nginx的反向代理功能和缓存功能

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  4. 使用Redis做预定库存缓存功能

    最近在自己的工作中,把其中一个PHP项目的缓存从以前的APC缓存逐渐切换到Redis中,并且根据Redis所支持的数据结构做了库存维护功能.缓存是在业务层做的,准确讲应该是在MVC模型中Model的O ...

  5. iOS开发 - Swift实现清除缓存功能

    前言: 开发移动应用时,请求网络资源是再常见不过的功能.如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见. 但是时间长了,离线缓存会占用大量的手 ...

  6. Android记录20-获取缓存大小和清除缓存功能

    Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存 ...

  7. iOS缓存功能

    之前做缓存,没有考虑过这个具体的实现. 移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所 ...

  8. iOS开发-清理缓存功能的实现

    移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅读类 ...

  9. JMessage是让App 同时集成 Push 功能与 IM 功能最完美的方案

    历经几个月的沉寂,以及兄弟们的奋战,极光推送的兄弟产品诞生了:极光IM,英文名 JMessage. 极光IM 是我们团队基于大量客户的需求反馈,在很多客户的殷切期盼下所开发的.团队成员一方面要支撑极光 ...

随机推荐

  1. php各种主流框架的优缺点

    ThinkPHP ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架.它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库 ...

  2. 归并排序(php实现)

    <?php function mergeSort(&$arr){ $len = count($arr); msort($arr,0,$len-1); } function msort(& ...

  3. ui-sref

    angularjs中路由跳转可以在模板页面上使用ui-sref="a-state({param1: value})"; 如果想为当前state的导航按钮添加一个激活class,可以 ...

  4. Linux下七牛云存储qrsync命令行上传同步工具

    原址:https://m.aliyun.com/yunqi/ziliao/54370 VPS数据备份是一个重要的工作,之前在文章:使用七牛云存储自动备份VPS数据分享过使用七牛云存储提供的工具QRSB ...

  5. 1503. [NOI2004]郁闷的出纳员【平衡树-splay】

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...

  6. P2245 星际导航

    题目描述 sideman 做好了回到 Gliese星球的硬件准备,但是 sideman 的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有 N 个顶点和 M 条边的带权无向图,顶点表示 ...

  7. virtualbox+vagrant学习-2(command cli)-18-vagrant ssh-config命令

    SSH Config 格式: vagrant ssh-config [options] [name|id] 这将从SSH直接将SSH配置文件的有效配置输出到正在运行的vagrant 计算机(而不是使用 ...

  8. PAT乙级1029

    1029 旧键盘 (20 分)   旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 ...

  9. Jmeter之断言

    Jmeter中的断言类似于LR中的检查点,是在请求的返回层面上加的一个判断机制.因为请求成功了,不代表结果就一定是对的,还要看返回(LR中亦如此,脚本回放没报错,不代表你的业务成功了,需要自己去相应的 ...

  10. UVa 10377 - Maze Traversal

    題目:一個機器人在迷宮中行走,它的指令是方向控制(前進.左轉.右轉).給你初始位置和一些指令: 問最後停在那個位置. 分析:模擬.直接模擬就可以,注意一下細節. 假设,不能行走(邊界或者是墻壁)則停在 ...