C# Xamarin Android工具栏如何动态添加项目

C# Xamarin Android工具栏如何动态添加项目,c#,android,xamarin,xamarin.android,android-toolbar,C#,Android,Xamarin,Xamarin.android,Android Toolbar,我已经按照xamarin android指南中的说明实现了android工具栏 使用示例代码: public override bool OnCreateOptionsMenu(IMenu menu) { MenuInflater.Inflate(Resource.Menu.mainMenu, menu); return base.OnCreateOptionsMenu(menu); } 和

我已经按照xamarin android指南中的说明实现了android工具栏

使用示例代码:

public override bool OnCreateOptionsMenu(IMenu menu)
        {           
            MenuInflater.Inflate(Resource.Menu.mainMenu, menu);

            return base.OnCreateOptionsMenu(menu);
        }
和xml:

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:local="http://schemas.android.com/apk/res-auto">
  <item
       android:id="@+id/menu_share"
       local:showAsAction="ifRoom"
       android:title="Share" />
  <item
       android:id="@+id/menu_settings"
       local:showAsAction="ifRoom"
       android:title="Settings" />
</menu>

如何从代码隐藏中实现这一点

IMenu
有一个
Add
方法,您可以调用该方法:

public override bool OnCreateOptionsMenu(IMenu menu)
{
        MenuInflater.Inflate(Resource.Menu.main_menu, menu);

        menu.Add(0, 99, 0, "DB Copy to SDCard (Debug)");

        return base. OnCreateOptionsMenu(menu);
}
有关参数,请查看Android文档:

要捕获菜单选择,您可以检查
IMenuItem.ItemId
值:

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
        case 99:
            DoSomething();
            return true;
        default:
            return false;
    }
}

您不需要创建一个选项卡式页面,并且在每个页面上创建一个webview

public partial class MainPage : TabbedPage
{
    public MainPage()
    {
        InitializeComponent();
        this.BarBackgroundColor = Color.Gray;

        var homePage = new HomePage();
        var accountPage = new AccountPage();
        var ordersPage = new OrdersPage();
        var promotionsPage = new PromotionsPage();
        var searchPage = new SearchPage();

        homePage.Icon = "imgs_main.png";
        accountPage.Icon = "imgs_account.png";
        ordersPage.Icon = "imgs_orders.png";
        promotionsPage.Icon = "imgs_promotions.png";
        searchPage.Icon = "imgs_search.png";

        homePage.Title = "Home";
        accountPage.Title = "Account";
        ordersPage.Title = "Orders";
        promotionsPage.Title = "Promotions";
        searchPage.Title = "Search";

        Children.Add(homePage);
        Children.Add(accountPage);
        Children.Add(ordersPage);
        Children.Add(promotionsPage);
        Children.Add(searchPage);

    }

虽然你的答案适合未来的需求,但我还是想说这是设计的必要性,这也是xamarin.android不可能的,xamarin.forms和xamarin.android一样好,如果几个月后你想在IOS上部署,那么代码就完成了。我对xamarin.forms的体验非常糟糕,每一步都有漏洞,所以在xamarin提出各种修复方案之前,我不会这么做。我对android很满意,因为我的大多数项目都不是iOS,所以对于一个非常棒的ui来说,你不需要在本机平台上做太多事情,但是对于表单,你必须添加自定义渲染,而且列表中还有每个不同的变量。这很烦人,但是当你获得了正确的自定义渲染器时,它就变成了一项正常的日常任务。嗨,感谢您的建议,我能够添加菜单项,如何将单击事件绑定到菜单项?我已接受您的回答,如果我需要问新问题,请告诉我,或者您可以在编辑中修改;)@我更新了我的答案,包括菜单选项。
public partial class MainPage : TabbedPage
{
    public MainPage()
    {
        InitializeComponent();
        this.BarBackgroundColor = Color.Gray;

        var homePage = new HomePage();
        var accountPage = new AccountPage();
        var ordersPage = new OrdersPage();
        var promotionsPage = new PromotionsPage();
        var searchPage = new SearchPage();

        homePage.Icon = "imgs_main.png";
        accountPage.Icon = "imgs_account.png";
        ordersPage.Icon = "imgs_orders.png";
        promotionsPage.Icon = "imgs_promotions.png";
        searchPage.Icon = "imgs_search.png";

        homePage.Title = "Home";
        accountPage.Title = "Account";
        ordersPage.Title = "Orders";
        promotionsPage.Title = "Promotions";
        searchPage.Title = "Search";

        Children.Add(homePage);
        Children.Add(accountPage);
        Children.Add(ordersPage);
        Children.Add(promotionsPage);
        Children.Add(searchPage);

    }