关于x5WebView 隐藏缓存、分享功能的一种思路

关于x5WebView 隐藏缓存、分享功能的一种思路

学习过程了解到使用腾讯的x5WebView可以代替原生webView浏览网页,于是下载了官方Demo体验和学习,发现使用效果还不错。官方地址: https://x5.tencent.com/.

基本网页浏览没问题,直播和视频播放效果也很好,但是全屏后的一些功能我们实际是不需要的,如:缓存、分享功能。
在这里插入图片描述

隐藏后的效果图:
在这里插入图片描述
思路:出现上面图片的界面是在我们点击进入全屏时候出现的view,所以需要回调

@Override
public void onShowCustomView(View view, CustomViewCallback customViewCallback) {}

我们要展示出来的界面就是这里的view,只需要对这个view做操作:

  1. 选择标准全屏,会调起onShowCustomView()方法
if (mWebView.getX5WebViewExtension() != null) {
	Bundle data = new Bundle();
	data.putBoolean("standardFullScreen", true);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,
	data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,
	data.putInt("DefaultVideoScreen", 1);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1
	mWebView.getX5WebViewExtension().invokeMiscMethod("setVideoParams",data);
}
  1. 获取子view,对需要的子view进行隐藏
View myVideoView;
View myNormalView;
CustomViewCallback callback;

@Override
public void onShowCustomView(View view, CustomViewCallback customViewCallback) {
	List<View> list = getAllChildViews(view);
	//12:缓存 13:小窗 14:分享 23:横竖屏
	//size等于26是先点播放,再点全屏
	//size等于29是先点全屏,再点播放
 	if (list.size() == 26) {
		list.get(12).setVisibility(View.INVISIBLE);
		list.get(13).setVisibility(View.INVISIBLE);
		list.get(14).setVisibility(View.INVISIBLE);
		list.get(23).setVisibility(View.INVISIBLE);
 	} else if (list.size() == 29) {
		list.get(15).setVisibility(View.INVISIBLE);
		list.get(16).setVisibility(View.INVISIBLE);
		list.get(17).setVisibility(View.INVISIBLE);
		list.get(26).setVisibility(View.INVISIBLE);
	}
	mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
	FrameLayout normalView = mWebView;
	ViewGroup viewGroup = (ViewGroup) normalView.getParent();
	viewGroup.removeView(normalView);
	viewGroup.addView(view);	
	myVideoView = view;
	myNormalView = normalView;
	callback = customViewCallback;
}

@Override
public void onHideCustomView() {
	mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
	if (callback != null) {
		callback.onCustomViewHidden();
		callback = null;
	}
 	if (myVideoView != null) {
		ViewGroup viewGroup = (ViewGroup) myVideoView.getParent();
		viewGroup.removeView(myVideoView);
		viewGroup.addView(myNormalView);
	}
	}
  1. 获取view的子view方法
public List<View> getAllChildViews(View view) {
	List<View> list = new ArrayList<View>();
    if (view instanceof ViewGroup) {
    	ViewGroup vp = (ViewGroup) view;
        for (int i = 0; i < vp.getChildCount(); i++) {
        	View child = vp.getChildAt(i);
            Log.d("hhc", "ClassName: " + child.getAccessibilityClassName().toString());
           	list.add(child);
            list.addAll(getAllChildViews(child));
   		}
	}
	return list;
}

size等于26时,日记输出如下:

0.android.view.View				
1.android.widget.FrameLayout				
2.android.widget.LinearLayout				
3.android.widget.LinearLayout		
4.android.view.View					
5.android.widget.TextView				
6.android.widget.FrameLayout					
7.android.view.View						
8.android.widget.LinearLayout			
9.android.widget.ImageView			
10.android.widget.TextView			
11.android.view.View					
12.android.widget.TextView			
13.android.widget.TextView			
14.android.widget.ImageView			
15.android.widget.FrameLayout					
16.android.widget.LinearLayout			
17.android.widget.ImageView			
18.android.widget.TextView		
19.android.widget.RelativeLayout 		
20.android.widget.LinearLayout	
21.android.widget.TextView	
22.android.widget.ImageView			
23.android.widget.ImageView			
24.android.view.View						
25.android.widget.ImageView

size等于29时,日记输出如下:

0.android.view.View				
1.android.widget.FrameLayout	
2.android.widget.RelativeLayout	
3.android.widget.ImageView		
4.android.widget.TextView		
5.android.widget.LinearLayout	
6.android.widget.LinearLayout	
7.android.view.View				
8.android.widget.TextView		
9.android.widget.FrameLayout	
10.android.view.View				
11.android.widget.LinearLayout	
12android.widget.ImageView		
13.android.widget.TextView		
14.android.view.View				
15.android.widget.TextView		
16.android.widget.TextView		
17.android.widget.ImageView		
18.android.widget.FrameLayout	
19.android.widget.LinearLayout	
20.android.widget.ImageView		
21.android.widget.TextView		
22.android.widget.RelativeLayout
23.android.widget.LinearLayout
24.android.widget.TextView		
25.android.widget.ImageView		
26.android.widget.ImageView		
27.android.view.View				
28.android.widget.ImageView		

仅提供一种思路,大家交流学习。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值