C# XamarinWebView通常不显示任何内容 public分部类页面:ContentPage { 公共页(字符串文件名) { 如果。。。 { WebView=新建WebView { 来源=”http://xamarin.com" //来源=”http://www.google.com" /*Source=新的HtmlWebViewSource { Html=@“ 测试代码
代码正在运行 " }*/ }; 内容=新的StackLayout() { 孩子们= { 看法 } }; } 其他的 页面大部分时间都是空白的。在xamarin.com的例子中,经过长时间的延迟后,页面占我运行页面时间的20%左右。google和自定义测试根本不起作用。自定义测试是我希望在某些特定情况下使用的测试,它更容易创建为web代码 在我的其他情况下,我创建和添加的其他视图组件工作得非常好。(按钮、标签等…) 断点并没有给我太多的提示。监视列表毫无用处地无法告诉我任何事情。我可以通过单步执行看出,在我的各种测试用例中都找到了正确的代码路径,但仅此而已 测试在我的Android手机上的Xamarin Live Player(Android 6.0-API 23)中完成。代码在Visual Studio 2015中。目标平台为Android和iOS 相应的xaml页面没有太多内容C# XamarinWebView通常不显示任何内容 public分部类页面:ContentPage { 公共页(字符串文件名) { 如果。。。 { WebView=新建WebView { 来源=”http://xamarin.com" //来源=”http://www.google.com" /*Source=新的HtmlWebViewSource { Html=@“ 测试代码,c#,android,xaml,xamarin,webview,C#,Android,Xaml,Xamarin,Webview,代码正在运行 " }*/ }; 内容=新的StackLayout() { 孩子们= { 看法 } }; } 其他的 页面大部分时间都是空白的。在xamarin.com的例子中,经过长时间的延迟后,页面占我运行页面时间的20%左右。google和自定义测试根本不起作用。自定义测试是我希望在某些特定情况下使用的测试,它更容易创建为web代码 在我的其他情况下,我创建和添加的其他视图组件工作得非常好。(按钮、标签等…) 断点并没有给我太多的提示。监视列表毫无用处地无法告诉我任何事情。我可以通过单步执
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%左右。google和自定义测试根本不起作用。自定义测试是我希望在某些特定情况下使用的测试,它更容易创建为web代码
我已经对其进行了测试并重现了问题。只有在构造函数中或在出现的中以编程方式创建webview时才会发生这种情况。我设置了断点,发现webview的高度不会自动展开(始终为0)。我的猜测是,如果您在页面的构造函数中创建webview或在出现时创建,,则webview永远不会根据其web内容进行重新测量
因此,有两种解决办法:
在Xaml中使用webview:
<?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>
更新:如果您正在使用HtmlWebViewSource
作为Web视图的源代码。View\u Navigated
将不会被触发。因此在这种情况下,您可以设置
webview.HeightRequest
在设置webview.Source
后显式执行:
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;
}
view=newwebview();
内容=新的堆栈布局
{
子项={view}
};
view.Navigated+=视图_Navigated;
//view.Source.BindingContextChanged+=Source\u BindingContextChanged;
//view.Source.PropertyChanged+=Source\u PropertyChanged;
HtmlWebViewSource mSource=新的HtmlWebViewSource
{
Html=@“
测试代码
代码正在运行
"
};
view.Source=mssource;
view.HeightRequest=150;
你在android清单文件中添加了互联网
权限了吗?是的,就在那里。将数据编辑到帖子中。谢谢!这一更改导致外部网站加载很好。(导航完成后,我进行了高度更新。)但是它没有修复HtmlWebViewSource测试…使用HtmlWebViewSource提供我自己的内容是我的最终目标。然后,您需要将高度请求设置为某个数字。请检查我的更新。成功了!非常感谢您的帮助!
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
...>
<WebView Source="http://xamarin.com"></WebView>
</ContentPage>
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;
}
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;