Webview и iFrame Video полноэкранная проблема - PullRequest
0 голосов
/ 30 апреля 2018

Я искал решение этой проблемы в течение нескольких недель, но продолжаю откладывать это в свое отставание.

У меня есть простое веб-представление, как показано ниже

WebView webView = FindViewById<WebView>(Resource.Id.webviewVideo);
webView.ClearCache(true);
webView.ClearHistory();                    
webView.SetWebChromeClient( new WebChromeClient { });
webView.Settings.JavaScriptEnabled = true;
webView.Settings.LoadWithOverviewMode = true;
webView.Settings.UseWideViewPort = true;                    
webView.LoadDataWithBaseURL("https://.", iFrameString, "text/html", "UTF-8", null);

Я передаю iFrame, видео загружается и воспроизводится нормально, но полноэкранный режим недоступен.

Решения, которые я пробовал

  • Включить JavaScript

  • Установить WebChromeClient

  • LoadDataWithBaseURL с https://

У меня также есть allowfullscreen, например, следующий iframe

<iframe width="560" height="315" src="https://www.youtube.com/embed/somevideoID" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> 

Есть какое-нибудь решение для этого?

1 Ответ

0 голосов
/ 30 апреля 2018

Чтобы включить полноэкранную кнопку на плеере YouTube, WebChromeClient должен реализовать OnShowCustomView и OnHideCustomView, и, таким образом, вы сами должны определить, что такое "полноэкранный режим" для вашего приложения, поскольку оно не имеет определяется размером экрана устройства.

Примечание: вам все еще нужен HTML5-тег allowfullscreen в вашем HTML-источнике iFrame

Итак, давайте предположим, что у вас есть этот тип макета:

LinearLayout (id = linearLayout)
   LinearLayout (id = contentLayout)
      Button
      WebView

Вы можете создать подкласс WebChromeClient и определить, как вы хотите отображать «полноэкранный» контент, в этом примере мы предположим, что самый внешний LinearLayout - это место, где мы хотим отображать видео YouTube, внутренний LinearLayout содержит весь контент действия, который вы хотите скрыть во время воспроизведения полноэкранного видео.

Реализация WebChromeClient:

public class FullScreenClient : WebChromeClient
{
    readonly FrameLayout.LayoutParams matchParentLayout = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent,
                                                                                                     ViewGroup.LayoutParams.MatchParent);
    readonly ViewGroup content;
    readonly ViewGroup parent;
    View customView;

    public FullScreenClient(ViewGroup parent, ViewGroup content)
    {
        this.parent = parent;
        this.content = content;
    }

    public override void OnShowCustomView(View view, ICustomViewCallback callback)
    {
        customView = view;
        view.LayoutParameters = matchParentLayout;
        parent.AddView(view);
        content.Visibility = ViewStates.Gone;
    }

    public override void OnHideCustomView()
    {
        content.Visibility = ViewStates.Visible;
        parent.RemoveView(customView);
        customView = null;
    }
}

Реализация SetWebChromeClient:

webView.SetWebChromeClient(new FullScreenClient(linearLayout, contentLayout));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...