WebView和Assets问题

时间:2012-03-13 00:33:55

标签: android xamarin.android

我当前的monodroid项目有两个问题 - 一个是从Assets加载而另一个是生成的网页被传递以显示它们之间相互关联会让事情变得更烦人!

资产问题很简单,无法找到该文件。我目前的代码看起来像这样

Android.App.Application.SynchronizationContext.Post(delegate
{
    string uri = "file:///android_asset/StyleSheet.css";
    string settings = string.Empty;

    using (var input = c.Assets.Open(uri))
    using (StreamReader sr = new System.IO.StreamReader(input))
    {
         settings = sr.ReadToEnd();
    }

    string CSS = "<html><head><style>" + settings + "</style></head><body style='height:600px;background: url(Back-AQHA.jpg)' >";
    retStr = CSS + tableData.Content + "</body></html>";
    callback(retStr);
}, null);

由于无法找到该文件,因此在sr.ReadToEnd()行中死亡。为我正确设置了所有权限,以便能够访问资产目录并读入。

c只是传递给方法的上下文

现在,假设已经读入文件并将其传回给调用者,现在无法显示(通过在应用程序中生成页面并将其传回来测试)... webviewer代码是沼泽标准

public class webservice_webview : Activity
{
    WebView web_view;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.webview);
        string res = base.Intent.GetStringExtra("content");
        if (res.Length > 0)
        {
            web_view = FindViewById<WebView>(Resource.Id.webviewer);
            web_view.Settings.JavaScriptEnabled = true;
            web_view.LoadData(res, "text/html", null);
            web_view.SetWebViewClient(new websiteviewClient());
        }
        else
            return;
    }

    private class websiteviewClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading(WebView view, string url)
        {
            view.LoadData(url, "text/html", null);
            return true;
        }
    }

    public override bool OnKeyDown(Android.Views.Keycode keyCode, Android.Views.KeyEvent e)
    {
        if (keyCode == Keycode.Back && web_view.CanGoBack())
        {
            web_view.GoBack();
            return true;
        }

        return base.OnKeyDown(keyCode, e);
    }
}
}

当内容被传递并呈现时,所有结果都是一个死网页,说网址数据; text / html; null,[生成的html]可能已经移动或已经移动。如何显示生成的页面?

由于

1 个答案:

答案 0 :(得分:0)

可能值得检查您的资产是否在资产文件夹中,并在属性窗格中标记为“AndroidAsset” - 同时请确保大小写正确。

假设他们是,那么你可以使用以下代码直接将资产传递给webview:

        var web = FindViewById<WebView>(Resource.Id.AboutWebView);
        web.LoadUrl("file:///android_asset/About/index.html");

来自https://github.com/slodge/mobile-samples/blob/master/MWC/MWC.Droid/Views/About/AboutXamarinView.cs

如果您确实想先读入并操作html文本,请尝试使用以下代码:Assets.Open("About/index.html") - 即不附带文件:scheme。

在你的第二个示例中,web_view.LoadData(res, "text/html", null);的代码看起来是正确的 - 但是我不确定ShouldOverrideUrlLoading中的逻辑是什么 - 看起来它可能只是阻止加载?