我們希望保留現有的默認菜單像複製,全選等,以及當我們添加新的菜單。
您可以覆蓋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(視圖),但它給出了相同的結果。該選擇僅在按下左移鍵時才起作用。 –