如何在以人像模式设计的android应用上以横向模式播放视频

问题描述 投票:0回答:1

[我想让应用程序显示来自youtube的视频iframe,然后将iframe放在index.html页内的另一页中。

问题是当我以全屏模式但以纵向模式打开视频播放时,因为我将代码android:screenOrientation="portrait"放在manifest.xml中,因为该应用程序是为纵向模式设计的。

我需要在我的Java文件中添加一条简单的Java线来解决此问题(以全屏模式在横向模式下播放视频)。>>

这是我的Java代码:

    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.FrameLayout;
    import androidx.appcompat.app.AppCompatActivity;

    public class MainActivity extends AppCompatActivity {
        private WebView webView;
        private FrameLayout customViewContainer;
        private WebChromeClient.CustomViewCallback customViewCallback;
        private View mCustomView;
        private myWebChromeClient mWebChromeClient;
        private myWebViewClient mWebViewClient;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
            webView = (WebView) findViewById(R.id.webView);

            mWebViewClient = new myWebViewClient();
            webView.setWebViewClient(mWebViewClient);

            mWebChromeClient = new myWebChromeClient();
            webView.setWebChromeClient(mWebChromeClient);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.loadUrl("javascript:myFunction()");
            webView.getSettings().setAppCacheEnabled(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.getSettings().setSaveFormData(true);
            webView.loadUrl("file:///android_asset/index.html");
        }

        public boolean inCustomView() {
            return (mCustomView != null);
        }

        public void hideCustomView() {
            mWebChromeClient.onHideCustomView();
        }

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

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

        @Override
        protected void onStop() {
            super.onStop();   
            if (inCustomView()) {
                hideCustomView();
            }
        }

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {

                if (inCustomView()) {
                    hideCustomView();
                    return true;
                }

                if ((mCustomView == null) && webView.canGoBack()) {
                    webView.goBack();
                    return true;
                }
            }
            return super.onKeyDown(keyCode, event);
        }

        class myWebChromeClient extends WebChromeClient {
            private Bitmap mDefaultVideoPoster;
            private View mVideoProgressView;

            @Override
            public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
                onShowCustomView(view, callback);    
            }

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

                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();   
                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;
            }
        }

        class myWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return super.shouldOverrideUrlLoading(view, url);
            }
        }

    }

[我想让应用程序显示来自youtube的视频iframe,然后将iframe放在index.html页内的另一页中。问题是当我以全屏模式但以纵向模式打开视频播放时...

java android android-studio rotation landscape
1个回答
0
投票

由于您在manifest.xml文件中提到了android:screenOrientation =“ portrait”。您可以在传递网址以在函数内部播放时尝试旋转屏幕。请在函数内部尝试此代码。

© www.soinside.com 2019 - 2024. All rights reserved.