ActionBar(3) 操作栏菜单自定义


   ActionBar上启用拆分操作栏  

 在<activity> 标签中设置  android:uiOptions="splitActionBarWhenNarrow" 即可启用.


   在ActionBar上显示菜单有几种方法.

 方法一:

   1. menu目录下生成XML文件,其中,要注意需要自定义命令空间。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >
        
     <item
        android:id="@+id/bar_popufind"     
        android:icon="@drawable/find_32"
        android:title="@string/bar_find"
        android:showAsAction="ifRoom|withText"
        app:showAsAction="ifRoom"        
        android:orderInCategory="1"          
       />
     
       <item
        android:id="@+id/bar_popuexit"
        android:icon="@drawable/exit_32"
        android:title="@string/bar_exit"        
        app:showAsAction="ifRoom"
        android:orderInCategory="2"  />
    
      <!-- 这个要保留,不然会报错 -->
      <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        app:showAsAction="never"
        android:icon="@drawable/xclapplogo"
        android:title="@string/action_settings"/>

</menu>


 2. 在onCreateOptionsMenu中指定xml 即可显示在bar上

    2.1  不定制

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        // getMenuInflater().inflate(R.menu.main, menu);    
    	// return true;    	
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_playview, menu);
        return super.onCreateOptionsMenu(menu);       
    }


  2.2 通过代码设置属性    

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        // getMenuInflater().inflate(R.menu.main, menu);    
    	// return true;    	
    	/*
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_playview, menu);
        return super.onCreateOptionsMenu(menu);    
        */
    	
    	/*
    	actionEnum的值有以下几种:
			MenuItemCompat.SHOW_AS_ACTION_ALWAYS (始终显示)
			MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW (隐藏列表中显示)			
			MenuItemCompat.SHOW_AS_ACTION_IF_ROOM (屏幕有空间就显示,没空间就隐藏)
			MenuItemCompat.SHOW_AS_ACTION_NEVER (永不显示)
			MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT (既显示图标又显示文字) 
		*/
        MenuInflater menuInflater = getMenuInflater();
   		menuInflater.inflate(R.menu.menu_playview, menu);
   		
   		MenuItem exitItem = menu.findItem(R.id.bar_popuexit);
   		MenuItem findItem = menu.findItem(R.id.bar_popufind);
   		
   		MenuItemCompat.setShowAsAction(exitItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
   		MenuItemCompat.setShowAsAction(findItem, 
   				MenuItemCompat.SHOW_AS_ACTION_ALWAYS|MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT);
   		return true;
    }


    事件响应:

 

 /**
     * 菜单事件响应
     */
    public boolean onOptionsItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch (item.getItemId()) {  
        case R.id.bar_popuexit:  
            Toast.makeText(getApplicationContext(), "退出菜单", 0).show();
            break;  
        case R.id.bar_popufind:  
            Toast.makeText(getApplicationContext(), "查找菜单", 0).show();  
            break; 
        case android.R.id.home:  
        	/*
        	 *  返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。
				使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在,
				所有在其上的activity都会被销毁,
				然后主activity会到栈顶,而不用创建主Activity的的新实例。
        	 * */
            Intent intent = new Intent(this, MainActivity.class);  
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  
                    | Intent.FLAG_ACTIVITY_NEW_TASK);  
            startActivity(intent);  
            Toast.makeText(getApplicationContext(), "android.R.id.home", 0)  
                    .show();  
            break;  
        default:  //action_compose
            break;  
        }  
        return super.onOptionsItemSelected(item);  
    }  
    
   


方法二:

     不使用XML文件,直接在代码中生成菜单项

  @SuppressLint("NewApi") @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
     
    	//http://developer.android.com/reference/android/view/Menu.html#add(int)
    	//public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
    	//添加菜单项  
        MenuItem findItem = menu.add(0,1,0,"查找");  
        MenuItem exitItem = menu.add(0,0,0,"退出"); 
        
        //绑定到ActionBar    
        findItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);  
        exitItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);  
        
        return true;
    }

 事件响应:

/**
     * 菜单事件响应
     */
    public boolean onOptionsItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch (item.getItemId()) {         
        case 0:  
        	displayToast("退出菜单");
        	break;
        case 1:  
        	displayToast("查找菜单");
        	break;
        case android.R.id.home:  
        	/*
        	 *  返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。
				使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在,
				所有在其上的activity都会被销毁,
				然后主activity会到栈顶,而不用创建主Activity的的新实例。
        	 * */
            Intent intent = new Intent(this, MainActivity.class);  
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  
                    | Intent.FLAG_ACTIVITY_NEW_TASK);  
            startActivity(intent);  
            Toast.makeText(getApplicationContext(), "android.R.id.home", 0)  
                    .show();  
            break;  
        default:  //action_compose
            break;  
        }  
        return super.onOptionsItemSelected(item);  
    }  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值