关于x5WebView 隐藏缓存、分享功能的一种思路
学习过程了解到使用腾讯的x5WebView可以代替原生webView浏览网页,于是下载了官方Demo体验和学习,发现使用效果还不错。官方地址: https://x5.tencent.com/.
基本网页浏览没问题,直播和视频播放效果也很好,但是全屏后的一些功能我们实际是不需要的,如:缓存、分享功能。
隐藏后的效果图:
思路:出现上面图片的界面是在我们点击进入全屏时候出现的view,所以需要回调
@Override
public void onShowCustomView(View view, CustomViewCallback customViewCallback) {}
我们要展示出来的界面就是这里的view,只需要对这个view做操作:
- 选择标准全屏,会调起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);
}
- 获取子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);
}
}
- 获取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
仅提供一种思路,大家交流学习。