ActionBar介紹:
ActionBar是一個顯示在屏幕頂部的控件,它包括了在左邊顯示的應用的logo圖標和右邊操作菜單的可見項。我們可以選擇可見的操作菜單可見項,不可見項會以下拉列表的形式呈現出來。
ActionBar基礎:
在Android3.0的默認主題“holographic”中,已經創造了ActionBar,所以Android最低的版本是Android3.0。(最低開發權限要求)
android:minSdkVersion="11"
android:targetSdkVersion="11" />
Activity消除ActionBar配置
android:name="com.rf.actionbardemo.MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar" >
添加ActionBar Item--源代碼
package com.rf.actionbardemo;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button showBtn=(Button) findViewById(R.id.showBt);
//ActionBar實例化
final ActionBar actionBar = getActionBar();
showBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//顯示頂部控件(ActionBar)
actionBar.show();
}
});
Button hideBtn=(Button) findViewById(R.id.hideBt);
hideBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//隱藏頂部控件(ActionBar)
actionBar.hide();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//添加活動項(Action Item)----代碼添加
// 每一個操作菜單的菜單項都可以成為ActionBar中的一個Action Item
super.onCreateOptionsMenu(menu);
MenuItem add = menu.add(0, 1, 0, "保存");
MenuItem open = menu.add(0, 2, 1, "打開");
MenuItem close = menu.add(0, 3, 2, "關閉");
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;
//添加活動項(Action Item)----xml文件
// 當使用xml文件創建菜單(menu)時,可以標記這些菜單項作為想要實現的Action Item
//MenuInflater inflater = getMenuInflater();
//inflater.inflate(R.menu.optionsmenu, menu);
//return true;
}
//ActionBar 點擊事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case R.id.item1:
Toast.makeText(MainActivity.this, "ActionBar點擊事件響應", Toast.LENGTH_LONG).show();
default:
return super.onOptionsItemSelected(item);
}
}
}
Action事件
ActionBar中一個菜單項(即Action item)的觸發像以前版本中的活動菜單回調方法(onOptionsItemSelected())一樣。
當用戶選擇一個Fragment的菜單項時,首先會調用Activity的onOptionsItemSelected()方法,如果該方法返回false,則調用Fragment實現的onOptionsItemSelected()方法。
應用圖標
默認情況下,應用圖標在ActionBar的左側
當用戶點擊應用bar的時候,系統會調用你的Activity里面的onOptionsItemSelected() 方法里面的Android.R.id.Home ID(你的主ID)里定義的事件。我們可以重寫這個方法,添加一個條件執行該行為:讓它跳轉到這個應用的主Activity而不是返回的主屏幕。
如果選擇返回應用的主activity,最好的方式是在創建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP這個標簽。
使用這個FLAG_ACTIVITY_CLEAR_TOP標簽,如果應用的主Activity已經在activity棧中存在,所有在其上的activity都會被銷毀,然后主activity會到棧頂,而不用創建主Activity的的新實例。
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
當我們想實現用戶點擊ActionBar 圖標后返回前一個activity,可以通過在Actionbar設置setDisplayHomeAsUpEnabled(true) 來實現。
[java]
public class HomyUpActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onStart() {
super.onStart();
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionsmenu, menu);
return true;
}
}