<p>Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar。</p><p>android集成开发环境eclipse、ADT</p><p>android sdk 3.0及以上</p><p>自定义Activity主题和ActionBar样式</p><p> 在新建的android工程的res/values/styles.xml添加自定义ActionBar样式的代码和自定义Activity主题的代码,并在AndroidMainfest.xml中给需要使用该自定义ActionBar的Activity中加入该主题:</p><p>(1)自定义ActionBar样式代码如下:</p><p> <!-- 自定义ActionBar样式,重设ActionBar背景,隐藏actionbar左侧的应用图标和标题 --></p><p> <style name="actionbar_def_style" parent="@android:style/Widget.Holo.Light.ActionBar"></p><p> <!-- 在样式里面直接替换掉actionbar的背景,避免在有的窗口进入慢时导致进入时显示系统默认的actionbar --> </p><p> <item name="android:background">@drawable/actionbar_background</item></p><p> <span class="Apple-tab-span" > </span><!-- 在样式里面去掉acionbar的应用图标和标题 --></p><p> <item name="android:displayOptions">useLogo</item></p><p> </style></p><p>(2)自定义Activity主题代码如下:</p><p> <!-- 自定义窗口样式,需要带ActionBar --></p><p> <style name="ActivityTheme_Light" parent="android:Theme.Holo.Light"></p><p> <item name="android:actionBarStyle">@style/actionbar_def_style</item></p><p> </style></p><p>(3)在AndroidManifest.xml文件中需要使用该自定义ActionBar的Activity中加入该主题如下:</p><pre class="brush:xml;toolbar:false"><activity
android:name="com.zmy.actionbarstyle.DiyActionBarActivity"
android:theme="@style/ActivityTheme_Light"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity></pre><p>在Activity中加载ActionBar的自定义布局</p><p>(1)ActionBar加载自定义布局的代码封装如下:</p><pre class="brush:java;toolbar:false">/**
*设置ActionBar的布局
*@paramlayoutId布局Id
*
**/
publicvoidsetActionBarLayout(intlayoutId){
ActionBaractionBar=getActionBar();
if(null!=actionBar){
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
LayoutInflaterinflator=(LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Viewv=inflator.inflate(layoutId,null);
ActionBar.LayoutParamslayout=newActionBar.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
actionBar.setCustomView(v,layout);
}
}</pre><p>(2)在onCreate()方法中调用该方法,并传入自定义的布局文件ID:</p><pre class="brush:java;toolbar:false">@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diy_action_bar);
//自定义actionbar的布局
setActionBarLayout(R.layout.actionbar_port_layout);
}</pre><p>(3)自定义布局文件"actionbar_port_layout.xml "代码如下:</p><pre class="brush:xml;toolbar:false"><?xmlversion="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></pre><p>在Action中监听ActionBar中按钮的点击事件</p><pre class="brush:java;toolbar:false">/**
*实现onClick方法,在这里面监听actionbar中按钮的点击事件
*
**/
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.menuBtnId:{
showToast(this,"menuBtn");
}
break;
caseR.id.noteBtnId:{
showToast(this,"noteBtn");
}
break;
caseR.id.downloadBtnId:{
showToast(this,"downloadBtn");
}
break;
caseR.id.editBtnId:{
showToast(this,"editBtn");
}
break;
default:{
}
break;
}
}</pre>