Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar。
自定义Activity主题和ActionBar样式
在新建的android工程的res/values/styles.xml添加自定义ActionBar样式的代码和自定义Activity主题的代码,并在AndroidMainfest.xml中给需要使用该自定义ActionBar的Activity中加入该主题:
(1)自定义ActionBar样式代码如下:
<!-- 自定义ActionBar样式,重设ActionBar背景,隐藏actionbar左侧的应用图标和标题 --> <style name="actionbar_def_style" parent="@android:style/Widget.Holo.Light.ActionBar"> <!-- 在样式里面直接替换掉actionbar的背景,避免在有的窗口进入慢时导致进入时显示系统默认的actionbar --> <item name="android:background">@drawable/actionbar_background</item> <!-- 在样式里面去掉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; } }
源码:http://download.csdn.net/detail/zmywly/6922375