HybridWebView, действующий как полностраничный браузер - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь создать веб-просмотр, который отображает веб-сайт с использованием HybridWebView, взятого отсюда https://github.com/xamarin/xamarin-forms-samples/tree/master/CustomRenderers/HybridWebView

XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:PortaleDocumenti.Xamarin"
             x:Class="PortaleDocumenti.Xamarin.MainPage">

    <ContentPage.Content>
        <local:HybridWebView x:Name="hybridWebView" Uri="https://ej2.syncfusion.com/demos/grid/grid-overview/index.html" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
    </ContentPage.Content>

</ContentPage>

Когда отображается страница ширинойи heigth не весь видовой экран дисплея телефона и отображается неправильно (кажется, что работает как версия для настольного компьютера), если я открою его в браузере работает нормально.

URL-адрес, например,следующее: https://ej2.syncfusion.com/demos/grid/grid-overview/index.html

В настоящее время я тестирую его на Samsung S10.

Я выполняю миграцию, если из приложения Cordova, которое отлично работает с:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'; img-src * data: 'unsafe-inline'; connect-src * 'unsafe-inline'; frame-src *;">

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <link rel="stylesheet" type="text/css" href="css/index.css">
    <title>Demo</title>
</head>
    <body>
        <div class="app">
            <h1>Apache Cordova</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
            </div>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="scripts/platformOverrides.js"></script>
        <script type="text/javascript" src="scripts/index.js"></script>
    </body>
</html>

и InAppBrowser, настроенный таким образом в onDeviceReady:

var myRef = cordova.InAppBrowser.open('https://ej2.syncfusion.com/demos/grid/grid-overview/index.html', '_blank', 'location=no,toolbar=no,zoom=no');

Ответы [ 3 ]

0 голосов
/ 19 октября 2019

У меня нет моего ПК, поэтому я не могу проверить. Но это должно сработать:

<ContentPage.Content>
     <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
         <local:HybridWebView x:Name="hybridWebView" Uri="https://ej2.syncfusion.com/demos/grid/grid-overview/index.html" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
     </StackLayout>

    </ContentPage.Content>

Если это не сработает, дайте HybridWebView HeightRequest и WidthRequest случайных больших цифр, таких как 2000

0 голосов
/ 21 октября 2019

Проблема в том, что когда HybridWebView запускает его высота и ширина неверны относительно его родителя, проблема не присутствует в обычном веб-просмотре.

Чтобы установить работает правильно, я должен изменить кодв OnElementChanged это следующее:

webView.Settings.UseWideViewPort = true;
webView.Settings.LoadWithOverviewMode = true;
webView.LayoutParameters = new global::Android.Widget.RelativeLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);
0 голосов
/ 19 октября 2019

Похоже, вам, вероятно, придется изменить настройки для собственного веб-представления Android, чтобы использовать порт широкого обзора. В методе Android HybridWebViewRenderer.OnElementChange () обновите параметры WebView, добавив следующее:

if (Control == null)
{
    var webView = new Android.Webkit.WebView(_context);
    webView.Settings.JavaScriptEnabled = true;
    webView.Settings.UseWideViewPort = true;
    webView.Settings.MinimumFontSize = 1;
    webView.Settings.MinimumLogicalFontSize = 1;
    webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
    SetNativeControl(webView);
}

Настройка webView.Settings.UseWideViewPort = true; должна помочь, но это не так, затем добавьте минимумразмеры шрифта, как указано выше.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...