Android系統中ActionBar默認的佈局不美觀且難於控制,經過爲ActionBar自定義佈局的方式能夠靈活控制ActionBar。android
android集成開發環境eclipse、ADTapp
android sdk 3.0及以上eclipse
自定義Activity主題和ActionBar樣式ide
在新建的android工程的res/values/styles.xml添加自定義ActionBar樣式的代碼和自定義Activity主題的代碼,並在AndroidMainfest.xml中給須要使用該自定義ActionBar的Activity中加入該主題:工具
(1)自定義ActionBar樣式代碼以下:佈局
<!-- 自定義ActionBar樣式,重設ActionBar背景,隱藏actionbar左側的應用圖標和標題 -->this
<style name="actionbar_def_style" parent="@android :style/Widget.Holo.Light.ActionBar">spa
<!-- 在樣式裏面直接替換掉actionbar的背景,避免在有的窗口進入慢時致使進入時顯示系統默認的actionbar --> .net
<item name="android:background">@drawable/actionbar_background</item>xml
<!-- 在樣式裏面去掉acionbar的應用圖標和標題 -->
<item name="android:displayOptions">useLogo</item>
</style>
(2)自定義Activity主題代碼以下:
<!-- 自定義窗口樣式,須要帶ActionBar -->
<style name="ActivityTheme_Light" parent="android:Theme.Holo.Light">
<item name="android:actionBarStyle">@style/actionbar_def_style</item>
</style>
(3)在AndroidManifest.xml文件中須要使用該自定義ActionBar的Activity中加入該主題以下:
<activity
android:name="com.zmy.actionbarstyle.DiyActionBarActivity"
android:theme="@style/ActivityTheme_Light"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在Activity中加載ActionBar的自定義佈局
(1)ActionBar加載自定義佈局的代碼封裝以下:
/**
* 設置ActionBar的佈局
* @param layoutId 佈局Id
*
* */
public void setActionBarLayout( int layoutId ){
ActionBar actionBar = getActionBar( );
if( null != actionBar ){
actionBar.setDisplayShowHomeEnabled( false );
actionBar.setDisplayShowCustomEnabled(true);
LayoutInflater inflator = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(layoutId, null);
ActionBar.LayoutParams layout = new ActionBar.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
actionBar.setCustomView(v,layout);
}
}
(2)在onCreate()方法中調用該方法,並傳入自定義的佈局文件ID:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diy_action_bar);
// 自定義actionbar的佈局
setActionBarLayout( R.layout.actionbar_port_layout );
}
(3)自定義佈局文件「actionbar_port_layout.xml 」代碼以下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="63.0dp"
android:id="@+id/actionbarLayoutId"
android:background="@drawable/actionbar_background">
<ImageButton
android:id="@+id/menuBtnId"
android:layout_marginLeft="12.0dp"
android:layout_marginTop="12.0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/menu"
android:contentDescription="@string/app_name"
android:onClick="onClick"
/>
<ImageButton
android:id="@+id/noteBtnId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12.0dp"
android:background="@drawable/notes"
android:contentDescription="@string/app_name"
android:layout_marginRight="12.0dp"
android:layout_alignParentRight="true"
android:onClick="onClick"
/>
<ImageButton
android:id="@+id/editBtnId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12.0dp"
android:background="@drawable/edit"
android:layout_toLeftOf="@id/noteBtnId"
android:layout_marginRight="12.0dp"
android:contentDescription="@string/app_name"
android:onClick="onClick"
/>
<ImageButton
android:id="@+id/downloadBtnId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12.0dp"
android:background="@drawable/download"
android:layout_toLeftOf="@id/editBtnId"
android:layout_marginRight="12.0dp"
android:contentDescription="@string/app_name"
android:onClick="onClick"
/>
</RelativeLayout>
在Action中監聽ActionBar中按鈕的點擊事件
/**
* 實現onClick方法,在這裏面監聽actionbar中按鈕的點擊事件
*
* */
public void onClick( View v ){
switch( v.getId( ) ){
case R.id.menuBtnId:{
showToast( this, "menuBtn" );
}
break;
case R.id.noteBtnId:{
showToast( this, "noteBtn" );
}
break;
case R.id.downloadBtnId:{
showToast( this, "downloadBtn" );
}
break;
case R.id.editBtnId:{
showToast( this, "editBtn" );
}
break;
default:{
}
break;
}
}
END
1
http://download.csdn.net/detail/zmywly/6922375
END
自定義actionbar的佈局時,應經過自定義actionbar的樣式爲其設置默認背景以免在進入窗口耗時較長時會首先顯示actionbar默認的背景。
經