Xamarin.android OnCreateContextMenu不使用webview

Xamarin.android OnCreateContextMenu不使用webview,xamarin.android,Xamarin.android,我有一个web视图,我需要在单击链接时为其创建上下文菜单键入我所做的: protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Webview); wv = (WebView)FindViewById(Resource.Id.WV); RegisterForContex

我有一个web视图,我需要在单击链接时为其创建上下文菜单键入我所做的:

 protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);

    SetContentView(Resource.Layout.Webview);

    wv = (WebView)FindViewById(Resource.Id.WV);
    RegisterForContextMenu(wv);
    wv.SetWebChromeClient(new WebChromeClient());
    wv.SetWebViewClient(new WebViewClient());
    wv.Settings.JavaScriptEnabled = true;
    wv.Settings.DomStorageEnabled = true;
    wv.Settings.SetSupportZoom(true);
    wv.Settings.DisplayZoomControls = false;
    wv.Settings.BuiltInZoomControls = true;
    wv.Settings.CacheMode = CacheModes.Default;
    wv.Settings.UseWideViewPort = true;
    wv.Settings.LoadWithOverviewMode = true;
    wv.SetInitialScale(1);

    wv.LoadUrl("file:///android_asset/index.html");


     }



    public override void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo)
   {
    base.OnCreateContextMenu(menu, v, menuInfo);
    WebView webView = (WebView)v;
    result = webView.GetHitTestResult();


    if (result.GetType().ToString().Equals("SRC_ANCHOR_TYPE") || result.GetType().ToString().Equals("ANCHOR_TYPE"))
    {

        var item = menu.Add("copylink");
        item.SetOnMenuItemClickListener(this);

    }


} 

但是“result.GetType()”不是检测锚点类型链接“result.GetType()”是在webview中被按下longtoch时检测不到任何链接。

如果您想向菜单中添加一个项目,您应该重写
OnActionModeStarted
方法。然后添加
设置菜单项ClickListener
,如下面的代码所示

   public override void OnActionModeStarted(ActionMode mode)
    {
        IMenu menu = mode.Menu;
        menu.Add("Add To Notes");
        menu.GetItem(0).SetOnMenuItemClickListener(new MyMenuItemOnMenuItemClickListener(this));

        base.OnActionModeStarted(mode);
    }

 internal class MyMenuItemOnMenuItemClickListener : Java.Lang.Object, IMenuItemOnMenuItemClickListener
{
    private MainActivity mainActivity;

    public MyMenuItemOnMenuItemClickListener(MainActivity mainActivity)
    {
        this.mainActivity = mainActivity;
    }

    public bool OnMenuItemClick(IMenuItem item)
    {
        Toast.MakeText(mainActivity, "You click the Add To Notes", ToastLength.Short).Show();
        return true;
    }
}
 WebView.HitTestResult result = webView.GetHitTestResult();
 Android.Webkit.HitTestResult myresult =  result.Type;
这里是运行GIF

如果要创建新菜单,可以使用
menu.Clear()

下面是跑步截图

更新

如果要获取长时间单击的类型,应确保
result.Type
的类型为
Webkit.HitTestResult
,使用
result.GetType()
,类型为
System.Type
。为了获得正确的类型,可以参考以下代码

   public override void OnActionModeStarted(ActionMode mode)
    {
        IMenu menu = mode.Menu;
        menu.Add("Add To Notes");
        menu.GetItem(0).SetOnMenuItemClickListener(new MyMenuItemOnMenuItemClickListener(this));

        base.OnActionModeStarted(mode);
    }

 internal class MyMenuItemOnMenuItemClickListener : Java.Lang.Object, IMenuItemOnMenuItemClickListener
{
    private MainActivity mainActivity;

    public MyMenuItemOnMenuItemClickListener(MainActivity mainActivity)
    {
        this.mainActivity = mainActivity;
    }

    public bool OnMenuItemClick(IMenuItem item)
    {
        Toast.MakeText(mainActivity, "You click the Add To Notes", ToastLength.Short).Show();
        return true;
    }
}
 WebView.HitTestResult result = webView.GetHitTestResult();
 Android.Webkit.HitTestResult myresult =  result.Type;
您可以参考调试gif。

您好,谢谢您的回复。我的问题是,如果我像这样进行toast,则触发长时间单击时,“result.GetType()”没有返回正确的值:toast.MakeText(Application.Context,result.GetType().ToString(),ToastLength.Short).Show();无论我在哪里单击webview,总是以字符串值返回:“andiod.webkit.webview+hiTestresult”我需要检测webview“AnchorType”中的链接,但它不起作用@u158مu1605; u1610; u1586; u1575i更新我的答案,您可以参考它。