android - Webview 显示 Assets 中的图像

标签 android xamarin xamarin.android uno-platform

我正在尝试使用 WebView 来显示一些自定义生成的 html,它会尝试显示作为 Assets 包含的图像。

目前,我只对让它在 Android head 中运行感兴趣。 (在 UWP 头中,我使用 RichTextBlock 来完成同样的事情。但是控件 InlineUIContainer 在 Uno 中尚不可用。)

在 Android head 中,我将这些图像的构建操作设置为 AndroidAsset(图像位于目录 Assets 中)

我尝试通过(当场)生成的 html 以下列方式引用这些图像:

<img src="imgName.png" />
<img src="ms-appdata:///imgName.png" />
<img src="ms-appdata:///local/imgName.png" />
<img src="file:///imgName.png" />

这些都不起作用。 我还尝试将 html 写入本地文件(而不是使用 NavigateToString)并导航到该文件,但无济于事。

根据“谷歌”的说法,在 Xamarin 中使用其 WebView 执行此操作的方法是使用 LoadDataWithBaseUrl(null, ...),但该方法是在 UWP/Uno 的 WebView 中不可用...

最佳答案

LoadDataWithBaseUrl方法是原生Android.Webkit.WebView的一个方法。这是由 Uno 的 WebView(模仿 UWP WebView 的 API)在内部创建的。

native WebView 不直接公开,但您可以轻松访问它:

XAML:

<Page x:Class="WebViewTest.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <WebView x:Name="XamlWebView" />
    </Grid>
</Page>

代码隐藏:

#if !NETFX_CORE
using Uno.UI;
#endif
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace WebViewTest
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            this.Loaded += MainPage_Loaded;
        }

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
#if __ANDROID__
            var nativeWebView = XamlWebView.FindFirstChild<Android.Webkit.WebView>();
            nativeWebView.LoadDataWithBaseURL(null, ...)
#endif
        }
    }
}

通过这种方式,您可以应用您描述的方法。

关于android - Webview 显示 Assets 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58809516/

相关文章:

android viewpager onTitleClick 禁用开关

c# - 更改定时器 iOS Xamarin 的背景

c# - 禁用后退按钮 C# Android Xamarin 代码没有响应

c# - 如何在 Xamarin.Android 和 Xamarin.iOS 上使用 dllmap?

java - Android WebView - JWT 身份验证

Android Studio 在有效的 Kotlin 代码中显示错误

java - 如何将字节数组转换为字符串以便将其打印到控制台上?

c# - Xamarin 安卓 : Archive - "App not installed. The package appears to be corrupt"

c# - 匿名事件

ios - 如何让Android特定代码兼容IOS?