Android 扩展actionbar菜单项

Android 扩展actionbar菜单项,android,android-actionbar,actionbarsherlock,Android,Android Actionbar,Actionbarsherlock,我使用actionbar菜单功能创建基本活动,并从中扩展其他活动 public class BaseActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public boolean

我使用actionbar菜单功能创建基本活动,并从中扩展其他活动

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;
    }


}

现在我想在一些活动中向actionbar添加一些按钮。如何将元素添加到actionbar并使用基本活动中的元素?

您可以在main.xml中为actionbar指定操作

例如:

<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" />

可以在main.xml中为actionbar指定操作

例如:

<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" />

制作包含特定于这些活动的按钮的不同xml文件。假设Activity1有两个按钮,Activity2有一个按钮,然后创建两个xml文件,如下所示

action\u 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>
<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>
<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>
<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>
活动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_activity1, menu);
   return true;
}
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 actionbar时所说的那样)


这是我用的。希望对您有所帮助。而且,我很高兴看到比这更简单的方法。:)

创建不同的xml文件,其中包含特定于这些活动的按钮。假设Activity1有两个按钮,Activity2有一个按钮,然后创建两个xml文件,如下所示

action\u 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>
<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>
<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>
<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>
活动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_activity1, menu);
   return true;
}
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 actionbar时所说的那样)


这是我用的。希望对您有所帮助。而且,我很高兴看到比这更简单的方法。:)

您可以像在BaseActivity中一样简单地执行此操作,但不要忘记调用
super.onCreateOptions菜单()

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" />
</menu>
<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>
<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>
<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>
在“子活动”中,您正在使用另一个配置,该配置来自
home.xml
,仅包含其他菜单项,无重复项。但是不要忘记调用
super。使用相同的
menu
实例调用
super.onCreateOptions菜单(menu)
,从
BaseActivity
添加元素(如果在充气后调用
super
的方法,父菜单项将添加到子菜单项之后,否则将添加到之前)


您可以像在BaseActivity中一样简单地执行此操作,但不要忘记调用
super.onCreateOptions菜单()

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" />
</menu>
<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>
<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>
<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>
在“子活动”中,您正在使用另一个配置,该配置来自
home.xml
,仅包含其他菜单项,无重复项。但是不要忘记调用
super。使用相同的
menu
实例调用
super.onCreateOptions菜单(menu)
,从
BaseActivity
添加元素(如果在充气后调用
super
的方法,父菜单项将添加到子菜单项之后,否则将添加到之前)


这很好,但我认为如果你在10个以上的活动上有一个菜单,那么这不是一个好方法。在这种情况下,我将让BaseActivity实现这个菜单,这样所有的活动(除非指定了不同的活动)都将继承同一个。这很好,但是我认为,如果你有一个菜单,上面有10个以上的活动,这不是一个好方法。在这种情况下,我会让BaseActivity实现这个菜单,这样所有的活动,除非指定一个不同的,都会继承同一个。