扩展操作栏菜单项

时间:2014-03-04 14:35:03

标签: android android-actionbar actionbarsherlock

我创建了基本活动,其中操作栏菜单功能正常,并从中扩展了其他活动。

public class BaseActivity extends SherlockFragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        ...
        return true;
    }


}

现在我想在某些活动中向操作栏添加一些按钮。如何向操作栏添加元素并使用基本活动中的元素?

3 个答案:

答案 0 :(得分:6)

您可以像在BaseActivity中一样简单,只是不要忘记致电super.onCreateOptionsMenu()

<强> main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/action_help"
        android:icon="@drawable/ic_action_help"
        android:title="@string/action_help" />
</menu>

<强> home.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/action_new"
        android:icon="@drawable/ic_action_new"
        android:title="@string/action_new" />
</menu>

在BaseActivity中,您使用的是基本菜单配置main.xml

public class BaseActivity extends SherlockFragmentActivity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

在儿童活动中,您使用home.xml的其他配置仅使用其他菜单项无重复项。但是不要忘记使用相同的super.onCreateOptionsMenu(menu)实例调用menu来添加来自BaseActivity的元素(如果您在子菜单项后添加,则会添加父菜单项膨胀后调用super的方法,否则调用

public class HomeActivity extends BaseActivity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.home, menu);
        return super.onCreateOptionsMenu(menu);
    }
}

答案 1 :(得分:0)

您可以在main.xml

中指定操作栏的操作

示例:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"/>
<item android:id="@+id/action_compose"
      android:icon="@drawable/ic_action_compose"
      android:title="@string/action_compose" />

从您的子类调用

@Override
public boolean onOptionsItemSelected(MenuItem item) {       
    return super.onOptionsItemSelected(item);
}

答案 2 :(得分:0)

制作不同的xml文件,其中包含特定于这些活动所需的按钮。对于Activity1,你有两个按钮,对于Activity2你有一个,那么你将创建2个xml文件,如下所示。

<强> action_activity1.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"/>
   <item android:id="@+id/action_compose"
    android:icon="@drawable/ic_action_compose"
    android:title="@string/action_compose" />
</menu>

<强> action_activity2.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"/>
</menu>

然后在onCreateOptionsMenu(菜单菜单)方法中膨胀所需的xml文件。像,

<强>活性1:

public boolean onCreateOptionsMenu(Menu menu) {
   // Inflate the menu; this adds items to the action bar if it is present.
   getMenuInflater().inflate(R.menu.action_activity1, menu);
   return true;
}

<强>活性2:

public boolean onCreateOptionsMenu(Menu menu) {
   // Inflate the menu; this adds items to the action bar if it is present.
   getMenuInflater().inflate(R.menu.action_activity2, menu);
   return true;
}

请注意语法(因为我使用了appcompat操作栏)。 :)

这就是我使用的。希望你觉得它有用。而且,我很高兴看到比这更简单的方法。 :)