Youtube видео не загружается в WebView - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу отобразить список Youtube видео, используя ListView и WebView.Но видео не загружаются.

WebView всегда показывает Произошла ошибка , как показано на рисунке ниже: enter image description here

В настоящее время я не знаюкак привязать URL непосредственно к WebView в AXML-файле, поэтому я настроил BindableWebView вместо этого:

public class BindableWebView : WebView
    {

        public BindableWebView(Context context, IAttributeSet attrs)
            : base(context, attrs)
        {
        }

        private string _webViewContent;

        public string WebViewContent
        {
            get { return _webViewContent; }
            set
            {
                _webViewContent = value;
                LoadHtmlString();
            }
        }

        private void LoadHtmlString()
        {
            LoadData(WebViewContent, "text/html", "utf-8");
        }
    }

Это файл AXML макета:

    <dc.AlphaLinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:local="http://schemas.android.com/apk/res-auto"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        local:MvxBind="Click ItemClickCommand">

        <!--Video Thumbnail-->
        <FrameLayout
            android:layout_width="@dimen/ProductImageWidth"
            android:layout_height="@dimen/ProductImageHeight"
            android:layout_margin="@dimen/ExtraNewsImagePadding">
            <BindableWebView
            android:id="@+id/playerWebView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            local:MvxBind="WebViewContent Video.YoutubeUrl" />
        </FrameLayout>

        <LinearLayout
           .....
        </LinearLayout>

</dc.AlphaLinearLayout>

Это модель видео:

namespace ....Shared.Models
{
    public class Video
    {
        public string YoutubeId { get; set; }

        public string YoutubeImageUrl => $"https://img.youtube.com/vi/{YoutubeId}/0.jpg";

        public string YoutubeUrl => $"<iframe width=\"100%\" height=\"100%\" src=\"https://www.youtube.com/embed/{YoutubeId}\" frameborder=\"0\" allowfullscreen></iframe>";

        public Guid NewsId { get; set; }
    }
}

и VideoListViewm в C #:

namespace DeHeus.Droid.Views
{
    public class VideoListView : DetailViewWithShare
    {
        protected override int LayoutId => Resource.Layout.VideoListView;
        private CustomMvxListView _videoListview;

        protected override void InitView(View view)
        {
            _videoListview = view.FindViewById<CustomMvxListView>(Resource.Id.videoList);
            _videoListview.ItemTemplateId = Resource.Layout.VideoListItemView;
        }

        protected override void CreateBinding()
        {
            var bindingSet = this.CreateBindingSet<VideoListView, VideoListViewModel>();

            bindingSet.Bind(_videoListview.Adapter)
                .For(v => v.ItemsSource)
                .To(vm => vm.VideoItemViewModels);


            bindingSet.Bind(_videoListview)
                .For(v => v.ScrollToBottom)
                .To(vm => vm.ScrollToBottomCommand);

            bindingSet.Apply();
        }
    }
}

При отладке WebViewContent получает точный URL, но я нене знаю, почему это не работает, как я думал: "<iframe width=\"100%\" height=\"100%\" src=\"https://www.youtube.com/embed/usoFYAqOMyA\" frameborder=\"0\" allowfullscreen></iframe>" enter image description here У кого-нибудь есть идеи?Спасибо

1 Ответ

0 голосов
/ 20 февраля 2019

Провел много исследований, и я наконец решил проблему.

Все, что вам нужно, это поставить SetWebChromeClient(new WebChromeClient()); перед LoadData

 public BindableWebView(Context context, IAttributeSet attrs)
            : base(context, attrs)
        {
            WebSettings settings = this.Settings;
            settings.JavaScriptEnabled = true;
            SetWebChromeClient(new WebChromeClient());
        }

        private string _webViewContent;

        public string WebViewContent
        {
            get { return _webViewContent; }
            set
            {
                _webViewContent = value;
                LoadHtmlString();
            }
        }

        private void LoadHtmlString()
        {
            LoadData(WebViewContent, "text/html", "utf-8");
        }
...