2017-07-16 32 views
0

我想要实现具有的WebView(HTML文本)和按钮“我同意”和“取消”TermsAndCOnditions滚动使用的WebView和按钮

问题ContentPage:我想要一个web视图插入到堆栈,因此,我必须声明宽度和高度。 高度是我的主要问题,因为我想跨度或FillAndExpend WebView。我不能得到一个返回值(HTML的高度?) 另外,我从不同的方式接近,以获得事件,当是webView onBottom,然后得到一些布尔值。

下面是代码:

StackLayout mainStackLayout = new StackLayout { VerticalOptions = LayoutOptions.Center, HorizontalOptions = LayoutOptions.Center }; 

     Frame f = new Frame { BackgroundColor = Constants.iBackgroundWhite }; 
     StackLayout motherStack = new StackLayout { Margin = new Thickness(15, 30) }; 

     StackLayout buttonStack = new StackLayout 
     { 
      Orientation = StackOrientation.Horizontal, 
      VerticalOptions = LayoutOptions.Center, 
      HorizontalOptions = LayoutOptions.Center, 
      Margin = new Thickness(0, 10) 
     }; 
     Label captionLabel = new Label 
     { 
      Text = "Terms and Conditions", 
      TextColor = Constants.iPink, 
      FontAttributes = FontAttributes.Bold, 
      FontSize = 25, 
      Margin = new Thickness(10, 0, 0, 15) 
     }; 


     var body = new HtmlWebViewSource(); 
     body.Html = @"<html><body> 
Lorem ipsum dolor sit amet, utinam tritani interpretaris mel ei, perfecto 
instructior ut vim. Usu ad erant maiorum, tollit latine ei ius, ea eos 
vitae nominati iracundia. Consul laboramus eam ad, eu est nisl expetendis 
philosophia. Doctus ceteros eu per, ut vel fierent similique accommodare, 
ius similique consectetuer et. 
Te nec vero quas utamur, in possim nonumes inimicus his, an animal recusabo 
per. Eos ut natum bonorum legimus. Nihil liberavisse no usu. Sea dignissim 
mnesarchum cu, et per simul persius, constituto definitionem per in. No vix 
novum verear apeirian, aliquam accumsan definitionem mel at. Mea et autem 
phaedrum iracundia, reque vidisse at usu. 
Ad mea commodo oportere. Quo ad debitis accusata atomorum. His dicit 
labores et, in dicat dolorum abhorreant est, ex qui voluptua oportere. Eum 
ex nonumy cotidieque signiferumque. Laudem commodo omittantur quo in, voluptua 
reformidans nam ad, ignota dicunt sed an. Mei ad sonet nonumes, no sit detracto 
officiis. 
Cibo exerci duo eu. Has habeo atomorum disputationi te, ne has idque delicata. 
Cibo nihil euismod qui ut. Dicit ubique maiorum duo et, eam ad probo percipit 
sententiae. Quas lucilius vis ne. Id nec fabellas consetetur, sit id melius 
impetus cotidieque, eum fierent praesent rationibus id. Qui et liber offendit 
verterem, ad eripuit eruditi qui. 
Vis affert instructior cu, cum id principes adolescens. Per omnes nominati 
salutatus at, ne audiam noluisse mel, aeque docendi fierent pro ne. At putant 
voluptua vis, duo ne etiam tritani. Ut solet laudem qualisque usu, dicunt 
adipisci his cu. Ea labore convenire corrumpit nec. Ne est quando virtute, 
virtute adipiscing an ius, an mei iracundia posidonium 

    </body> </html>"; 

     _webView = new WebView 
     { 
      Source = body, 
      VerticalOptions = LayoutOptions.FillAndExpand, 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      WidthRequest = App.ScreenWidth * 0.8, 
      HeightRequest = 500 
     }; 


     _webView.IsEnabled = false; 


     #region Buttons 
     Button okButton = new Button(); 
     okButton.SetWhiteButton(); 
     okButton.Text = "I ACCEPT"; 
     okButton.FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)) - 5; 
     okButton.WidthRequest = Device.GetNamedSize(NamedSize.Large, typeof(Button)) * 5; 
     okButton.BorderRadius = Constants.BorderRadius + 5; 

     Button cancelButton = new Button(); 
     cancelButton.SetDefaultButton(); 
     cancelButton.Text = "CANCEL"; 
     cancelButton.FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)) - 5; 
     cancelButton.WidthRequest = Device.GetNamedSize(NamedSize.Large, typeof(Button)) * 5; 
     cancelButton.BorderRadius = Constants.BorderRadius + 5; 

     bool isChekedTaC = false; 
     okButton.Clicked += (s, e) => 
     { 
      isChekedTaC = true; 
      Navigation.PushAsync(new RegisterOnePageNew(isChekedTaC, registrationRequestModel, "1234")); 
     }; 

     #endregion 

     //var a = _webView.Eval("window.onscroll = function(ev) { if ((window.innerHeight + window.pageYOffset) >= document.body.offsetHeight){alert('youre on the bottom');}};" 

     //_webView.Navigated += (o, s) => { 
     // _webView.Eval("alert('text')"); 
     //}; 
     buttonStack.Children.Add(cancelButton); 
     buttonStack.Children.Add(okButton); 
     buttonStack.HorizontalOptions = LayoutOptions.CenterAndExpand; 
     buttonStack.VerticalOptions = LayoutOptions.Start; 

     grid.Children.Add(_webView, 0, 0); 
     //grid.Children.Add(buttonStack, 1, 0); 


     StackLayout sl = new StackLayout(); 
     //sl.Children.Add(contentLabel); 
     sl.Children.Add(_webView); 
     sl.Children.Add(buttonStack); 

     mainStackLayout.Children.Add(captionLabel); 
     mainStackLayout.Children.Add(new ScrollView { Content = sl }); 
     //mainStackLayout.Children.Add(buttonStack); 
     f.Content = mainStackLayout; 
     motherStack.Children.Add(f); 
     Content = sl; 

    } 



    protected override bool OnBackButtonPressed() 
    { 
     Navigation.PopAsync(); 
     return true; 
    } 

我只是想提出我的两个按钮,在HTML的WebView到达底部。我怎样才能做到这一点?

#选项1:在底部返回true/false 我使用XLabs HybridWebView进行了一半管理。这里是代码,也许对某人有用。

public class HybridView : ContentPage 
{ 
    HybridWebView hybrid; 
    public HybridView() 
    { 
     var stack = new StackLayout 
     { 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      VerticalOptions = LayoutOptions.FillAndExpand, 
      BackgroundColor = Color.White 
     }; 

     var body = new HtmlWebViewSource(); 
     body.Html = @"<html><body> 
         Lorem ipsum dolor sit amet, utinam tritani interpretaris mel ei, perfecto instructior ut vim. Usu ad erant maiorum, tollit latine ei ius, ea eos vitae nominati iracundia. Consul laboramus eam ad, eu est nisl expetendis philosophia. Doctus ceteros eu per, ut vel fierent similique accommodare, ius similique consectetuer et. 
         Te nec vero quas utamur, in possim nonumes inimicus his, an animal recusabo per. Eos ut natum bonorum legimus. Nihil liberavisse no usu. Sea dignissim mnesarchum cu, et per simul persius, constituto definitionem per in. No vix novum verear apeirian, aliquam accumsan definitionem mel at. Mea et autem phaedrum iracundia, reque vidisse at usu. 
         Ad mea commodo oportere. Quo ad debitis accusata atomorum. His dicit labores et, in dicat dolorum abhorreant est, ex qui voluptua oportere. Eum ex nonumy cotidieque signiferumque. Laudem commodo omittantur quo in, voluptua reformidans nam ad, ignota dicunt sed an. Mei ad sonet nonumes, no sit detracto officiis. 
         Cibo exerci duo eu. Has habeo atomorum disputationi te, ne has idque delicata. Cibo nihil euismod qui ut. Dicit ubique maiorum duo et, eam ad probo percipit sententiae. Quas lucilius vis ne. Id nec fabellas consetetur, sit id melius impetus cotidieque, eum fierent praesent rationibus id. Qui et liber offendit verterem, ad eripuit eruditi qui. 
         Vis affert instructior cu, cum id principes adolescens. Per omnes nominati salutatus at, ne audiam noluisse mel, aeque docendi fierent pro ne. At putant voluptua vis, duo ne etiam tritani. Ut solet laudem qualisque usu, dicunt adipisci his cu. Ea labore convenire corrumpit nec. Ne est quando virtute, virtute adipiscing an ius, an mei iracundia posidonium. 
         </body> </html>"; 


     hybrid = new HybridWebView 
     { 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      VerticalOptions = LayoutOptions.FillAndExpand, 
      BackgroundColor = Color.White, 
      WidthRequest = 300, 
      HeightRequest = 600, 
      Source = body 

     }; 

     stack.Children.Add(hybrid); 

     Content = stack; 
    } 

    protected override void OnAppearing() 
    { 
     base.OnAppearing(); 
     hybrid.InjectJavaScript("window.onscroll = function(ev) { if ((window.innerHeight + window.pageYOffset) >= document.body.offsetHeight){alert('youre on the bottom');}};"); 
    } 
} 

现在我只是弄清楚如何获得信息从JS

+0

您将不得不使用平台特定的代码。 –

+0

其实如果你使用的是HybridWebView,它应该已经有了这个选项来使用RegisterAction来调用C#。 –

回答

1

你可以把“我同意”和“取消”按钮,进入HTML xamarin表格,然后注入到你的旧的源代码。通过这种方式,您可以使用单个WebView来显示全部。

+0

我刚刚做到了这一点,但是当我返回行动throgh C#是这样的:'myvar.ReturnOnAction =(data => MyFunc())// MyFunc {App.Current.Main = new NavigationPage(new MyPage();}当我在方法中输入时,程序退出应用程序。稍后,我将发布完整的代码 – Stefan0309