玩转android之Action bar

玩转android之Action bar 


背景:

在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果。


常用属性:

1.showAsAction:

当你的应用程序目标设为蜂巢平台时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。
  这个属性可接受的值有:
  1、always:这个值会使菜单项一直显示在Action Bar上。
  2、ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
  3、never:这个值使菜单项永远都不出现在Action Bar上。
  4、withText:这个值使菜单项和它的图标,菜单文本一起显示。


常用功能:搜索、分享、刷新、下拉列表、更多

目标:

玩转android之Action bar_第1张图片

玩转android之Action bar_第2张图片

玩转android之Action bar_第3张图片

玩转android之Action bar_第4张图片

玩转android之Action bar_第5张图片


实现:

MainActivity.java

package com.hitwh.readscarf;


import java.lang.reflect.Field;

import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import android.widget.ArrayAdapter;
import android.widget.ShareActionProvider;
import android.widget.Toast;

public class MainActivity extends Activity {
	  
    private String[] actions = new String[] { "Action-1", "Action-2", "Action-3" };  
    private MenuItem menuItem = null; 

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		// 显示ActionBar
		ActionBar actionBar = getActionBar();
		actionBar.show();
		
		// 显示扩展menu
		getOverflowMenu();
		
		// 显示DropDownList
		/** Create an array adapter to populate dropdownlist */  
        ArrayAdapter adapter = new ArrayAdapter(  
                getBaseContext(),  
                android.R.layout.simple_spinner_dropdown_item, actions);  
        /** Enabling dropdown list navigation for the action bar */  
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);   
        /** Setting dropdown items and item navigation listener for the actionbar */  
        actionBar.setListNavigationCallbacks(adapter, navigationListener);
        
	} 
	
	/** 
	 * 默认 Navigation listener 
	 **/  
    ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {  
        @Override  
        public boolean onNavigationItemSelected(int itemPosition,  
                long itemId) {  
            Toast.makeText(getBaseContext(),  
                    "You selected : " + actions[itemPosition],  
                    Toast.LENGTH_SHORT).show();  
            return false;  
        }  
    }; 

    /**
     * 创建 Menu 
     */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		// 加载  Menu
		MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        
        // 加载分享menu
        ShareActionProvider provider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();  
        // 初始化 Share Intent 
        Intent intent = new Intent(Intent.ACTION_SEND);  
        intent.setType("text/plain");  
        intent.putExtra(Intent.EXTRA_TEXT, "Text I want to share");  
        provider.setShareIntent(intent);  
        
        return true;
	}

	/**
	 * Menu 选择事件
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) { 
		// 刷新menu
        case R.id.refresh:  
            menuItem = item;  
            menuItem.setActionView(R.layout.progressbar);  
            TestTask task = new TestTask();  
            task.execute("test");  
            break;  
        // 保存menu
        case R.id.save:  
            Toast.makeText(this, "Menu Item save selected", Toast.LENGTH_SHORT).show();  
            break;
        // 搜索menu
        case R.id.search:
        	Toast.makeText(this, "Menu Item search selected", Toast.LENGTH_SHORT).show();
        	break;
        // 分享menu
        case R.id.share:
        	Toast.makeText(this, "Menu Item share selected", Toast.LENGTH_SHORT).show();
        	break;
        default:  
            break;  
        }  
        return super.onOptionsItemSelected(item); 
	}
	
	/**
	 * 显示更多菜单
	 */
	private void getOverflowMenu() {
		 
	     try {
	        ViewConfiguration config = ViewConfiguration.get(this);
	        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
	        if(menuKeyField != null) {
	            menuKeyField.setAccessible(true);
	            menuKeyField.setBoolean(config, false);
	        }
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
	
	/**
	 * 显示加载进度条
	 * @author Mr-rxz
	 *
	 */
	private class TestTask extends AsyncTask {  
		  
        @Override  
        protected String doInBackground(String... params) {  
            // Simulate something long running  
            try {  
                Thread.sleep(5000);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
            return null;  
        }  
  
        @Override  
        protected void onPostExecute(String result) {  
        	// 这个方法需要 API 14 以上 
            menuItem.collapseActionView();  
            menuItem.setActionView(null);  
        }  
    };  


}

menu/main.xml




    
    
    
    
     





你可能感兴趣的:(Android)