Xamarin.forms 如何在webview中实现点击手势来显示html而不是网站
我需要我的网络视图是可点击和可搜索的。一旦我实现触控,滚动就不起作用了。通过这种方式,我设法让它工作,但现在我不知道如何使网络视图可点击?按键没有任何作用,如果我使用移动,那么我只是滚动 这是我在mu droid项目中的渲染Xamarin.forms 如何在webview中实现点击手势来显示html而不是网站,xamarin.forms,Xamarin.forms,我需要我的网络视图是可点击和可搜索的。一旦我实现触控,滚动就不起作用了。通过这种方式,我设法让它工作,但现在我不知道如何使网络视图可点击?按键没有任何作用,如果我使用移动,那么我只是滚动 这是我在mu droid项目中的渲染 class ExtendedWebViewClient : WebViewClient { WebView _webView; public async override void OnPageFinish
class ExtendedWebViewClient : WebViewClient
{
WebView _webView;
public async override void OnPageFinished(WebView view, string url)
{
try
{
_webView = view;
if (_xwebView != null)
{
view.Settings.JavaScriptEnabled = true;
await Task.Delay(100);
string result = await _xwebView.EvaluateJavaScriptAsync("(function(){return document.body.scrollHeight;})()");
_xwebView.HeightRequest = Convert.ToDouble(result);
}
base.OnPageFinished(view, url);
}
catch (Exception ex)
{
Console.WriteLine($"{ex.Message}");
}
}
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
{
return true;
}
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
_xwebView = e.NewElement as ExtendedWebView;
_webView = Control;
if (e.OldElement == null)
{
_webView.SetWebViewClient(new ExtendedWebViewClient());
}
if (e.OldElement != null)
{
Control.Touch -= ControlOnTouch;
Control.ScrollChange -= ControlOnScrollChange;
}
if (e.NewElement != null)
{
Control.Touch += ControlOnTouch;
Control.ScrollChange += ControlOnScrollChange;
}
}
private void ControlOnScrollChange(object sender, ScrollChangeEventArgs scrollChangeEventArgs)
{
if (scrollChangeEventArgs.ScrollY > 0 && scrollChangeEventArgs.OldScrollY == 0)
{
Control.Parent.RequestDisallowInterceptTouchEvent(true);
}
}
private void ControlOnTouch(object sender, Android.Views.View.TouchEventArgs e)
{
// Executing this will prevent the Scrolling to be intercepted by parent views
switch (e.Event.Action)
{
case MotionEventActions.Down:
Control.Parent.RequestDisallowInterceptTouchEvent(true);
break;
case MotionEventActions.Up:
Control.Parent.RequestDisallowInterceptTouchEvent(false);
break;
case MotionEventActions.ButtonPress:
Console.WriteLine("press");
break;
case MotionEventActions.Mask:
Console.WriteLine("mask");
break;
}
// Calling this will allow the scrolling event to be executed in the WebView
Control.OnTouchEvent(e.Event);
}
类扩展WebViewClient:WebViewClient
{
网络视图(WebView),;
公共异步重写void OnPageFinished(WebView视图,字符串url)
{
尝试
{
_网络视图=视图;
如果(xwebView!=null)
{
view.Settings.JavaScriptEnabled=true;
等待任务。延迟(100);
string result=wait xwebView.EvaluateJavaScriptAsync(((function(){return document.body.scrollHeight;})();
_xwebView.HeightRequest=Convert.ToDouble(结果);
}
base.OnPageFinished(视图、url);
}
捕获(例外情况除外)
{
Console.WriteLine($“{ex.Message}”);
}
}
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView视图,IWebResourceRequest请求)
{
返回true;
}
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
_xwebView=e.NewElement作为扩展webview;
_webView=控件;
if(e.OldElement==null)
{
_SetWebViewClient(新的扩展WebViewClient());
}
if(e.OldElement!=null)
{
Control.Touch-=ControlOnTouch;
Control.ScrollChange-=ControlOnScrollChange;
}
if(例如NewElement!=null)
{
Control.Touch+=ControlOnTouch;
Control.ScrollChange+=ControlOnScrollChange;
}
}
私有void控件ScrollChange(对象发送方,ScrollChangeEventArgs ScrollChangeEventArgs)
{
如果(scrollChangeEventArgs.ScrollY>0&&scrollChangeEventArgs.OldScrollY==0)
{
Control.Parent.RequestDisallowWinterCeptTouchEvent(true);
}
}
私有void ControlOnTouch(对象发送方,Android.Views.View.TouchEventArgs e)
{
//执行此操作将防止父视图截获滚动
开关(如事件、动作)
{
案例MotionEventActions.Down:
Control.Parent.RequestDisallowWinterCeptTouchEvent(true);
打破
case MotionEventActions.Up:
Control.Parent.RequestDisallowWinterCeptTouchEvent(false);
打破
case MotionEventActions.button按:
控制台。写线(“按”);
打破
case MotionEventActions.Mask:
控制台写入线(“掩码”);
打破
}
//调用此函数将允许在WebView中执行滚动事件
控制事件(如事件);
}
您可以使用以下聚焦的事件,而不是在webview上使用手势识别器。当您点击网络视图时,它将被调用
var wb = new WebView
{
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand,
Source = "xxx",
};
wb.Focused += (sender, event) =>
{
//Handle your logic here!
wb.Unfocus();
};
Unfocus()用于在每次点击webview时实现您的逻辑。我以前尝试过这一方法,但没有成功完成这项工作。这只是在构造器的内容页背面实现的?是的,什么方法不起作用。卷轴工作了吗?我会让邹知道我只是在执行它,我不确定,我想不是卷轴不工作,就是没有被炒鱿鱼。我最近实施了很多不同的方法,我不记得结果是什么。然而,我找不到任何关于这个焦点事件或pannedcommand的适当文档,所以我认为实现不正确!太棒了!你救了我的命!非常感谢。快乐编码:)