Xamarin.android OnCreateContextMenu不使用webview
我有一个web视图,我需要在单击链接时为其创建上下文菜单键入我所做的: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
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更新我的答案,您可以参考它。