Android開發學習之ActionBar深入

在 上一篇文章中,我們實現瞭ActionBar的簡單功能,並對ActionBar有瞭一定的瞭解。事實上,ActionBar提供瞭三種導航方式,分別是標準、Tab、Spinner。那麼今天我們就來學習後面兩種。首先來看看最終實現的效果吧!

一、Tab模式下的ActionBar,佈局代碼如下:

    

主要邏輯代碼如下:

package com.Android.ActionBarTab;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity implements TabListener {

	private ActionBar mActionBar;
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv=(TextView)findViewById(R.id.TabText);
		//取得ActionBar
		mActionBar=getActionBar();
		//以Tab方式導航
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		//禁用ActionBar標題
		mActionBar.setDisplayShowTitleEnabled(false);
		//禁用ActionBar圖標
		mActionBar.setDisplayUseLogoEnabled(false);
		//禁用ActionBar返回鍵
		mActionBar.setDisplayShowHomeEnabled(false);
		//添加Tab
		for(int i=0;i<4;i++)
		{
			ActionBar.Tab tab=mActionBar.newTab();
			tab.setText("選項卡"+i);
			tab.setTabListener(this);
			mActionBar.addTab(tab);
		}
	}

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

	@Override
	public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
		// TODO 自動生成的方法存根
		
	}

	@Override
	public void onTabSelected(Tab tab, FragmentTransaction arg1) 
	{
		tv.setText("這裡是"+tab.getText());
	}

	@Override
	public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
		// TODO 自動生成的方法存根
		
	}

}

註意,這裡並沒有對這個例子進行深化,其實結合Fragment我們可以做出更棒的效果來,這點先賣個關子,後面有時間的話會為大傢分享的

二、Spinner模式下的ActionBar,佈局如下:

    

主要的邏輯代碼如下:

package com.Android.ActionBarWithView;


import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

public class MainActivity extends Activity {

	private ActionBar mActionBar;
	private String[] SpinnerValues;
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//取得TextView
		tv=(TextView)findViewById(R.id.TextView);
		//初始化數組
		SpinnerValues=getResources().getStringArray(R.array.SpinnerValues);
		//構造適配器
		SpinnerAdapter mAdapter=ArrayAdapter.createFromResource(this, R.array.SpinnerValues, android.R.layout.simple_spinner_dropdown_item);
		//取得ActionBar
		mActionBar=getActionBar();
		//以下拉列表方式導航
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		//設置監聽器
		mActionBar.setListNavigationCallbacks(mAdapter, new OnNavigationListener()
		{
			@Override
			public boolean onNavigationItemSelected(int position, long id) 
			{
				tv.setText("你選擇瞭瞭"+SpinnerValues[position].toString());
				return false;
			}
			
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) 
	{
		menu.add("測試項1").setIcon(R.drawable.ic_editor_white).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		menu.add("測試項2").setIcon(R.drawable.ic_search_white).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		menu.add("測試項3").setIcon(R.drawable.ic_refresh_white).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		return true;
	}

}

同樣地,上面的這個例子可以和Fragment進行很好的整合,做出更棒的效果。ActionBar+Fragment可以說是很無敵的一種設計方式。

發佈留言