Xamarin WebView通常什么都不显示

问题描述 投票:1回答:1
public partial class Page : ContentPage
{
    public Page(string filename)
    {
        if(...
        {
            WebView view = new WebView
            {
                Source = "http://xamarin.com"
                //Source = "http://www.google.com"
                /*Source = new HtmlWebViewSource
                {
                    Html = @"<html><body>
                            <h1>Test Code</h1>
                            <p>The code is working.</p>
                            </body></html>"
                }*/
            };
            Content = new StackLayout()
            {
                Children =
                {
                    view
                }
            };
        }
        else ...

该页面大部分时间显示为空白。在xamarin.com示例中,经过长时间的延迟后,页面填充的时间约占我运行时间的20%。谷歌和自定义测试根本不起作用。自定义的是我希望为某些特定情况工作,这些情况将更容易创建为Web代码。

在我的其他情况下,我创建和添加的其他视图组件工作完全正常。 (按钮,标签等......)

断点对我没有多大帮助。该关注列表无可救药地无法告诉我任何事情。我可以看到,在我的各种测试用例中都可以找到正确的代码路径,但这就是它。

测试在我的Android手机上通过Xamarin Live Player(Android 6.0 - API 23)完成。代码在Visual Studio 2015中。目标平台是Android和iOS。

相应的xaml页面没有多少内容。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Project.Views.Page"
</ContentPage>

编辑:

AndroidManifest.xml具有INTERNET权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Company.Project" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:label="Project.Android"></application>
</manifest>
c# android xaml xamarin webview
1个回答
2
投票

该页面大部分时间显示为空白。在xamarin.com示例中,经过长时间的延迟后,页面填充的时间约占我运行时间的20%。谷歌和自定义测试根本不起作用。自定义的是我希望为某些特定情况工作,这些情况将更容易创建为Web代码。

我测试了它并重现了这个问题。只有在构造函数或OnAppearing中以编程方式创建webview时才会发生这种情况。我设置了断点,发现webview的高度没有自动扩展(总是0)。我的猜测是,如果你在页面的构造函数或OnAppearing中创建webview,webview永远不会根据它的web内容重新测量。

所以有两种解决方法:

  1. 在Xaml中使用webview: <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" ...> <WebView Source="http://xamarin.com"></WebView> </ContentPage>
  2. 在webview的HeightRequest中给出一个OnNavigatedprotected override void OnAppearing() { base.OnAppearing(); view = new WebView(); Content = new StackLayout { Children = { view } }; view.Navigated += View_Navigated; view.Source = "http://xamarin.com"; } private void View_Navigated(object sender, WebNavigatedEventArgs e) { (sender as WebView).HeightRequest = Height; }

更新:如果您使用HtmlWebViewSource为您的webview的Source.View_Navigated将不会被触发。因此,在这种情况下,您可以在设置webview.HeightRequest后明确设置webview.Source

view = new WebView();
Content = new StackLayout
{
    Children = { view }
};
view.Navigated += View_Navigated;
//view.Source.BindingContextChanged += Source_BindingContextChanged;
//view.Source.PropertyChanged += Source_PropertyChanged;
HtmlWebViewSource mSource = new HtmlWebViewSource
{
    Html = @"<html><body>
           <h1>Test Code</h1>
           <p>The code is working.</p>
           </body></html>"
};
view.Source = mSource;
view.HeightRequest = 150;
© www.soinside.com 2019 - 2024. All rights reserved.