Webview показать изображение из активов - PullRequest
1 голос
/ 12 ноября 2019

Я пытаюсь использовать WebView, чтобы показать какой-то пользовательский html, который пытается показать изображения, которые включены в качестве активов.

В настоящее время я заинтересован только в том, чтобы заставить это работать вголова андроида. (В главе UWP я использовал RichTextBlock, чтобы выполнить то же самое. Но элемент управления InlineUIContainer еще не доступен в Uno.)

В голове Android я установилСоздайте действие для этих изображений на 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) и перейти к нему, но безрезультатно.

Согласно «Google», способ сделать это вXamarin с WebView использует LoadDataWithBaseUrl(null, ...), но этот метод недоступен в WebView UWP / Uno ...

1 Ответ

0 голосов
/ 13 ноября 2019

Метод LoadDataWithBaseUrl является методом нативного Android.Webkit.WebView. Это создается внутри WebView Uno (который имитирует API UWP WebView).

Нативный 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
        }
    }
}

Таким образом, вы можете применить описанный вами подход.

...