无法在自定义 Webview 中全屏显示 Youtube 视频 [英] Unable to Full Screen Youtube Video Inside Custom Webview
问题描述
更新
我已更新我的问题以隐藏机密代码.
I have updated my question to hide confidential code.
如果还有一些困惑,请在评论中给我留言.
If still there is some confusion pls msg me in comments.
问题
我编写了一个自定义 Webview,用于播放嵌入在我网站中的 youtube 视频以全屏显示.
I have written an custom Webview for playing youtube video embedded in my website to go full Screen.
但它仍然不起作用...请帮助
But its still not Working.. . kindly Help
public class MainActivity extends Activity implements OnClickListener {
final Context context = this;
private WebView webView;
private ImageButton btnrefresh;
private TextView txtrefresh;
private myWebChromeClient mWebChromeClient;
private Menu optionsMenu;
private WebChromeClient.CustomViewCallback customViewCallback;
private View mCustomView;
private FrameLayout customViewContainer;
@SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Tushar
customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
//Tushar
//define button
btnrefresh = (ImageButton) findViewById(R.id.imageButton1);
btnrefresh.setOnClickListener(this);
btnrefresh.setVisibility(View.GONE);
//define textView
txtrefresh = (TextView)findViewById((R.id.textView1));
txtrefresh.setVisibility(View.GONE);
if(isConnected())
{
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setRenderPriority(RenderPriority.HIGH);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setSaveFormData(true);
// webView.getSettings().setPluginState(PluginState.ON);
webView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
sendEmail(url.substring(7));
return true;
}
return false;
}
});
initWebView(webView);
webView.loadUrl("http://Example.com/");
}
else
{
RelativeLayout rel = (RelativeLayout)findViewById(R.id.relativelayout1);
rel.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
refresh();
}
});
btnrefresh.setVisibility(View.VISIBLE);
txtrefresh.setVisibility(View.VISIBLE);
Toast.makeText(getBaseContext(), "No Internet Connection !!", Toast.LENGTH_SHORT).show();
}
}
public boolean inCustomView() {
return (mCustomView != null);
}
public void hideCustomView() {
mWebChromeClient.onHideCustomView();
}
@Override
protected void onPause() {
super.onPause(); //To change body of overridden methods use File | Settings | File Templates.
webView.onPause();
}
@Override
protected void onResume() {
super.onResume(); //To change body of overridden methods use File | Settings | File Templates.
webView.onResume();
}
@Override
protected void onStop() {
super.onStop(); //To change body of overridden methods use File | Settings | File Templates.
if (inCustomView()) {
hideCustomView();
}
}
//tushar
class myWebChromeClient extends WebChromeClient {
private Bitmap mDefaultVideoPoster;
private View mVideoProgressView;
@Override
public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
onShowCustomView(view, callback); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onShowCustomView(View view,CustomViewCallback callback) {
// if a view already exists then immediately terminate the new one
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mCustomView = view;
webView.setVisibility(View.GONE);
customViewContainer.setVisibility(View.VISIBLE);
customViewContainer.addView(view);
customViewCallback = callback;
}
@Override
public View getVideoLoadingProgressView() {
if (mVideoProgressView == null) {
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
mVideoProgressView = inflater.inflate(R.layout.video_progress, null);
}
return mVideoProgressView;
}
@Override
public void onHideCustomView() {
super.onHideCustomView(); //To change body of overridden methods use File | Settings | File Templates.
if (mCustomView == null)
return;
webView.setVisibility(View.VISIBLE);
customViewContainer.setVisibility(View.GONE);
// Hide the custom view.
mCustomView.setVisibility(View.GONE);
// Remove the custom view from its container.
customViewContainer.removeView(mCustomView);
customViewCallback.onCustomViewHidden();
mCustomView = null;
}
}
推荐答案
要实现这一点,您应该:
To achieve this you should:
- 实现
WebChromeClient
的showCustomView
和hideCustomView
方法. - 在
AndroidManifest.xml
中将android:hardwareAccelerated="true"
设置为您的MainActivity
.
- Implement
showCustomView
andhideCustomView
methods ofWebChromeClient
. - Set
android:hardwareAccelerated="true"
to yourMainActivity
inAndroidManifest.xml
.
有两个类继承了代码中的 WebChromeClient
(myWebChromeClient
和 MyWebChromeClient
).第一个实现了 showCustomView
和 hideCustomView
方法,它似乎完全适用于全屏视频.第二个不要.但是您(意外地?)将第二个设置为 WebChromeClient
到您的 WebView
.
There are two classes that inherit the WebChromeClient
in your code (myWebChromeClient
and MyWebChromeClient
). The first implements showCustomView
and hideCustomView
methods and it seems fully working with full-screen video. The second one don't. But you (accidentally?) set the second as WebChromeClient
to your WebView
.
要解决这个问题,只需更改行
To fix this just change the line
webView.setWebChromeClient(new MyWebChromeClient());
到
mWebChromeClient = new myWebChromeClient();
webView.setWebChromeClient(mWebChromeClient);
在您的 initWebView()
方法中.
UPD:
要在正常(非全屏)模式下锁定纵向的方向,请将以下行添加到 onHideCustomView()
方法中:
To lock orientation on portrait in normal (not full-screen) mode add following line into onHideCustomView()
method:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
为了让系统决定全屏模式下的最佳方向,将此行添加到onShowCustomView(View view, CustomViewCallback callback)
方法:
To let the system decide the best orientation in full-screen mode add this line to onShowCustomView(View view, CustomViewCallback callback)
method:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
这篇关于无法在自定义 Webview 中全屏显示 Youtube 视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!