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>
该页面大部分时间显示为空白。在xamarin.com示例中,经过长时间的延迟后,页面填充的时间约占我运行时间的20%。谷歌和自定义测试根本不起作用。自定义的是我希望为某些特定情况工作,这些情况将更容易创建为Web代码。
我测试了它并重现了这个问题。只有在构造函数或OnAppearing
中以编程方式创建webview时才会发生这种情况。我设置了断点,发现webview的高度没有自动扩展(总是0)。我的猜测是,如果你在页面的构造函数或OnAppearing
中创建webview,webview永远不会根据它的web内容重新测量。
所以有两种解决方法:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
...>
<WebView Source="http://xamarin.com"></WebView>
</ContentPage>
HeightRequest
中给出一个OnNavigated
:
protected 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;