网页高度可以使用WebViewRenderer正确呈现,但不能使用ViewRenderer <hybridwebview,android.webkit.webview =“”>

时间:2019-03-21 16:46:05

标签: xamarin.forms webview xamarin.android android-webview custom-renderer

默认WebViewRenderer与我的自定义ViewRenderer之间有些不同,我必须找出原因。基本上,如果我使用自定义ViewRenderer,则不会显示网页。

ViewRendererheight: 100%;有一些问题,并解释了此CSS错误。结果,高度为0px,尽管它应该使用完整高度。另一方面,它可以使用确切的尺寸(例如400px)。

WebViewRenderer的代码:

<local:CustomWebView x:Name="webView"
     Source="http://somesite"
     HorizontalOptions="FillAndExpand"
     VerticalOptions="FillAndExpand"
     HeightRequest="1000"
     WidthRequest="1000"/>
public class CustomWebView : WebView
{
}

public class CustomWebViewRenderer : WebViewRenderer
{
    public CustomWebViewRenderer(Context context) : base(context)
    {

    }
}

ViewRenderer的代码:

<local:HybridWebView x:Name="webView"
                     HorizontalOptions="FillAndExpand"
                     VerticalOptions="FillAndExpand"
                     HeightRequest="1000"
                     WidthRequest="1000"/>
public class HybridWebView : View
{
}

public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView>
{
    private Context context;

    public HybridWebViewRenderer(Context context) : base(context)
    {
        this.context = context;
    }

    protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
    {
        base.OnElementChanged(e);

        if (Control == null)
        {
            var webView = new Android.Webkit.WebView(this.context);
            webView.Settings.JavaScriptEnabled = true;
            webView.SetWebViewClient(new CustomWebViewClient());
            SetNativeControl(webView);
        }

        if (e.OldElement != null)
        {
        }

        if (e.NewElement != null)
        {
            Control.LoadUrl("http://somesite");
        }
    }
}

public class CustomWebViewClient : WebViewClient
{

}

一个假设是自适应网站适应其WebView的大小,并且由于呈现过程是在后台进行的,因此此时它的高度为零。

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是this为我解决了这个问题:

webView.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);

如果有人有线索,请发表评论。