Я прочитал существующий вопрос о том, как использовать веб-просмотр в Xamarin.Android, который предлагает писать код для конкретной платформы на каждой поддерживаемой платформе.
В идеале я хочу хранить свой html в файле на /assets/ в Xamarin.Forms вместо того, чтобы хранить его один раз для каждой ОС.
Я хочу иметь более простой способ и просто хранить актив в Xamarin.Forms. Это возможно?
@ G.hakim: Нет, другой спрашивающий хочет решение, которое работает на Android This only needs to be done through Android so there is no worries about about IOS and Windows.. Я хочу уменьшить сложность для нескольких ОС.
Итак, вы хотите кроссплатформенное решение для того же вопроса?
@ G.hakim: Да.
Не могли бы вы рассказать немного о том, как хранится ваш HTML-ресурс? это как объект или как файл?
@ G.hakim: Хорошо, я отредактировал свой вопрос.
Я добавил ответ в соответствии с моим пониманием вопроса, взгляните и дайте мне знать, если я что-то пропустил





Что ж, если я прав, вы можете сделать это, используя встроенный файл в папке с активами, а затем прочитать его с помощью System.IO примерно так (при условии, что вы используете сборку NET Standard):
Добавьте файл, который вы хотите прочитать, в нужную папку в переносимом классе, а также убедитесь, что Действие сборки: EmbeddedResource.
Затем используйте GetManifestResourceStream для доступа к встроенному файлу с использованием его идентификатора ресурса. По умолчанию идентификатором ресурса является имя файла с префиксом пространства имен по умолчанию для проекта, в который он встроен - в данном случае сборка - WorkingWithFiles, а имя файла - PCLTextResource.txt. , поэтому идентификатор ресурса - WorkingWithFiles.PCLTextResource.txt. Теперь, чтобы получить желаемые данные файла, все, что вам нужно, это примерно так:
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(LoadResourceText)).Assembly;
Stream stream = assembly.GetManifestResourceStream("WorkingWithFiles.PCLTextResource.txt");
string text = "";
using (var reader = new System.IO.StreamReader (stream)) {
text = reader.ReadToEnd ();
}
Где LoadResourceText - это cs-файл, в котором я использую этот код для получения текущей сборки. Обратите внимание, что это должна быть та же сборка, в которой присутствует только что добавленный встроенный ресурс, а WorkingWithFiles.PCLTextResource.txt - это путь сборки для вашего встроенного ресурса, например: если имя вашей сборки - Foo, а ваш файл находится в папке с именем Asset, тогда ваш путь для этого было бы что-то вроде Foo.Asset.Your_File.txt
Как только вы закончите со всем этим, начинается легкая часть, на вашей странице WebView определите HtmlWebViewSource и назначьте его в качестве источника для ваших WebView и Vola! вы загрузили данные из файла в ваш файл.
var browser = new WebView();
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = ;//your html string here
browser.Source = htmlSource;
Проверьте Как работать с файлами для получения дополнительной информации.
Что мне нужно импортировать для LoadResourceText?
Замените его именем вашего текущего класса, а также проследите, чтобы эти изображения находились в той же сборке, что и ваш текущий класс.
Я нашел способ заставить его работать:
В RightClickOnProject/Properties/Resources есть представление, позволяющее добавлять файлы, которые можно использовать в качестве ресурсов в Xamarin.Forms. Я добавил туда HtmlFile.txt-файл.
Я добавляю WebView в xaml через:
<ContentPage.Content>
<StackLayout>
<WebView x:Name = "Web" VerticalOptions = "FillAndExpand" />
</StackLayout>
</ContentPage.Content>
Затем в коде программной части я делаю:
public partial class OurPage: ContentPage
{
public OurPage()
{
InitializeComponent();
Web.Source = new HtmlWebViewSource{Html = Properties.Resources.HtmlFile};
}
}
Вы сталкиваетесь с той же проблемой, что и другой спрашивающий?