我们希望保留现有的默认菜单像复制,全选等,以及当我们添加新的菜单。
您可以覆盖onActionModeStarted
方法以在默认Menu
上添加新菜单。重写这个方法,你可以通知Activity
一个动作模式已经开始。这里是我的代码,它工作正常:
WebView view = FindViewById<WebView>(Resource.Id.web);
view.Settings.JavaScriptEnabled = true;
view.SetWebViewClient(new MyWebViewClient());
view.LoadUrl("https://www.google.com.sg/?gfe_rd=cr&ei=gFDGWIjIH8LB9AXbwY3QDg");
public class MyWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading(WebView view, string url)
{
view.LoadUrl(url);
return true;
}
}
保留现有的默认菜单,同时增加新的菜单:
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);
}
坐落在新menu
的ItemClickListerer
:
menu.GetItem(0).SetOnMenuItemClickListener(new MyMenuItemOnMenuItemClickListener(this));
public class MyMenuItemOnMenuItemClickListener : Java.Lang.Object, IMenuItemOnMenuItemClickListener
{
private MainActivity mContext;
public MyMenuItemOnMenuItemClickListener(MainActivity activity)
{
this.mContext = activity;
}
public bool OnMenuItemClick(IMenuItem item)
{
Toast.MakeText(mContext, "Hi", ToastLength.Short).Show();
return true;
}
}
类似this的效果。
编辑:
使用此定制WebView
行为可能是很简单,你只需要添加一个新的菜单,我想指出的上方和初始化Renderer
的WebView
,这里是我的代码:
在Xamarin.Forms:
public class WebPage : ContentPage
{
public WebPage()
{
var browser = new MyVebView();
browser.Source = "https://www.google.com.sg/?gfe_rd=cr&ei=gFDGWIjIH8LB9AXbwY3QDg";
Content = browser;
}
}
在你WebViewRenderer
:
[assembly: ExportRenderer(typeof(MyVebView), typeof(MyVebViewRenderer))]
namespace FormsWebView.Droid
{
public class MyVebViewRenderer : WebViewRenderer
{
Android.Webkit.WebView webView;
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
if(Control == null)
{
webView = new Android.Webkit.WebView(Context);
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new MyWebViewClient());
webView.LoadUrl("https://www.google.com.sg/?gfe_rd=cr&ei=gFDGWIjIH8LB9AXbwY3QDg");
SetNativeControl(webView);
}
}
}
}
覆盖的onActionModeStarted
方法添加一个新的菜单正如我上面所说:
namespace FormsWebView.Droid
{
[Activity(Label = "FormsWebView", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
public override void OnActionModeStarted(ActionMode mode)
{
//...
}
}
public class MyWebViewClient : WebViewClient
{
//...
}
public class MyMenuItemOnMenuItemClickListener : Java.Lang.Object, IMenuItemOnMenuItemClickListener
{
//...
}
}
你注册自定义上下文菜单你'WebView'?像这样的'RegisterForContextMenu(view)'方法。 –
其实我使用Xamarin.Forms,但我写了自定义渲染器&试过RegisterForContextMenu(视图),但它给出了相同的结果。该选择仅在按下左移键时才起作用。 –