Android笔记之menu与ActionBar使用

一、在menu/main.xml设计menu(菜单)和ActionBar(活动栏)

效果如下:

1、菜单项属性android:showAsAction,如果没有则在底部菜单显示

这个属性可接受的值有:

(1)always:这个值会使菜单项一直显示在Action Bar上。

(2)ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。

(3)never:这个值使菜单项永远都不出现在Action Bar上。

(4)withText:这个值使菜单项以图标,菜单文本一起显示在底部菜单。

如果有必要可以同时设置两个属性 <android:showAsAction="ifRoom|withText">

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_search"
          android:icon="@android:drawable/ic_menu_search"
          android:title="@string/action_bar_search"
          android:showAsAction="ifRoom"
          android:actionViewClass="android.widget.SearchView" />
     <item android:id="@+id/action_edit"
          android:icon="@android:drawable/ic_menu_edit"
          android:showAsAction="always"
          android:title="@string/action_bar_edit" />
     <item android:id="@+id/action_add"
          android:icon="@android:drawable/ic_menu_add"
          android:title="@string/action_bar_add" />
</menu>

2、添加一项菜单,并且带有子菜单:

<item android:id="@+id/action_sort"  
          android:icon="@android:drawable/ic_menu_sort_by_size"  
          android:title="@string/action_bar_sort"  
          android:showAsAction="ifRoom">  
        <menu>  
            <item android:id="@+id/action_sort_size"  
                  android:icon="@android:drawable/ic_menu_sort_by_size"  
                  android:title="@string/action_bar_sort_size" />  
            <item android:id="@+id/action_sort_alpha"  
                  android:icon="@android:drawable/ic_menu_sort_alphabetically"  
                  android:title="@string/action_bar_sort_alpha"/>  
        </menu>  
    </item>  

3、菜单项监听事件:

@Override
public
boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.menu_save: Toast.makeText(getApplicationContext(), "menu_save", 0).show(); break;default: break; } return super.onOptionsItemSelected(item); }

 4、其他:

(1)点击Search按钮的时候,它的Action View会显示出来

<item android:id="@+id/action_search"
      android:icon="@android:drawable/ic_menu_search"
      android:title="@string/action_bar_search"
      android:showAsAction="ifRoom"
      android:actionViewClass="android.widget.SearchView" />

属性:

android:actionProviderClass="android.widget.ShareActionProvider" 

android:onClick="onSort"

android:actionViewClass="android.widget.SearchView"

二、代码设计ActionBar

1、添加ActionBar并显示或隐藏

public boolean onCreateOptionsMenu(Menu menu) {
            MenuItem add = menu.add(0, 1, 0, "Save"); 
            MenuItem open = menu.add(0, 2, 1, "Open"); 
            MenuItem close = menu.add(0, 3, 2, "Close"); 
            add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
            open.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
            close.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
            return true;
    }

隐藏ActionBar:

 actionBar = getActionBar(); 
 actionBar.hide(); 

2、实现用户点击ActionBar 图标后返回前一个activity,可以通过在Actionbar设置setDisplayHomeAsUpEnabled(true) 来实现。
在当前Activity中添加:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.about, menu);
        // 使应用程序图标向上导航
        ActionBar actionBar = getActionBar();
        // actionBar.hide();移除所有actionbar
        actionBar.setDisplayHomeAsUpEnabled(true);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }

    }

Done!

原文地址:https://www.cnblogs.com/xingyyy/p/3269035.html