【问题标题】:Using one main.xml for different activities action bar将一个 main.xml 用于不同的活动操作栏
【发布时间】:2026-02-19 19:40:01
【问题描述】:

我正在开发一个在操作栏上显示按钮的应用程序。我现在正在做的只是将项目添加到 menu 文件夹下的 ma​​in.xml 中。但是如果在 ma​​in.xml 中添加 3 个项目呢如果对任何活动进行 ma​​in.xml 膨胀,它会向我显示 3 个项目,但我只想要一个项目,所以有什么方法可以让我不必创建不同的 xml 文件。

以下是代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

/** define action for the action bar button*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub

    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
        break;

    case R.id.action_create:

        fname=et_fname.getText().toString();
        lname=et_lname.getText().toString();
        email=et_email.getText().toString();
        password=et_password.getText().toString();
        IsValid();

        break;



    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

【问题讨论】:

    标签: android android-activity android-actionbar


    【解决方案1】:

    实现此目的的一种方法是在菜单文件中使用组

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <group
            android:id="@+id/main_menu_group">
             <item android:id="@+id/action_create"
                  android:title="Create"
                  android:icon="R.drawable.ic_action_create"
                  android:showAsAction="ifRoom"/>
        </group>
    </menu>
    

    那么,

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
             MenuInflater inflater = getMenuInflater();
             inflater.inflate(R.menu.custom_actionbar, menu);
             menu.setGroupVisible(R.id.main_menu_group,true);
         }
     } 
    

    【讨论】:

    • 但我希望组中一次只能看到一个项目
    • 试试这个@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem test1 = menu.findItem(R.id.action_test1); test1.setVisible(false); MenuItem test2=menu.findItem(R.id.action_test2); test2.setVisible(false); return true; }