<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> &lt;!-- 自定义ActionBar样式,重设ActionBar背景,隐藏actionbar左侧的应用图标和标题 --&gt;</p><p> &lt;style name=&quot;actionbar_def_style&quot; parent=&quot;@android:style/Widget.Holo.Light.ActionBar&quot;&gt;</p><p> &lt;!-- 在样式里面直接替换掉actionbar的背景,避免在有的窗口进入慢时导致进入时显示系统默认的actionbar --&gt; </p><p> &lt;item name=&quot;android:background&quot;&gt;@drawable/actionbar_background&lt;/item&gt;</p><p> <span class="Apple-tab-span" > </span>&lt;!-- 在样式里面去掉acionbar的应用图标和标题 --&gt;</p><p> &lt;item name=&quot;android:displayOptions&quot;&gt;useLogo&lt;/item&gt;</p><p> &lt;/style&gt;</p><p>(2)自定义Activity主题代码如下:</p><p> &lt;!-- 自定义窗口样式,需要带ActionBar --&gt;</p><p> &lt;style name=&quot;ActivityTheme_Light&quot; parent=&quot;android:Theme.Holo.Light&quot;&gt;</p><p> &lt;item name=&quot;android:actionBarStyle&quot;&gt;@style/actionbar_def_style&lt;/item&gt;</p><p> &lt;/style&gt;</p><p>(3)在AndroidManifest.xml文件中需要使用该自定义ActionBar的Activity中加入该主题如下:</p><pre class="brush:xml;toolbar:false">&lt;activity android:name=&quot;com.zmy.actionbarstyle.DiyActionBarActivity&quot; android:theme=&quot;@style/ActivityTheme_Light&quot; android:label=&quot;@string/app_name&quot;&gt; &lt;intent-filter&gt; &lt;actionandroid:name=&quot;android.intent.action.MAIN&quot;/&gt; &lt;categoryandroid:name=&quot;android.intent.category.LAUNCHER&quot;/&gt; &lt;/intent-filter&gt; &lt;/activity&gt;</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)自定义布局文件&quot;actionbar_port_layout.xml &quot;代码如下:</p><pre class="brush:xml;toolbar:false">&lt;?xmlversion=&quot;1.0&quot;encoding=&quot;utf-8&quot;?&gt; &lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:layout_width=&quot;fill_parent&quot; android:layout_height=&quot;63.0dp&quot; android:id=&quot;@+id/actionbarLayoutId&quot; android:background=&quot;@drawable/actionbar_background&quot;&gt; &lt;ImageButton android:id=&quot;@+id/menuBtnId&quot; android:layout_marginLeft=&quot;12.0dp&quot; android:layout_marginTop=&quot;12.0dp&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:background=&quot;@drawable/menu&quot; android:contentDescription=&quot;@string/app_name&quot; android:onClick=&quot;onClick&quot; /&gt; &lt;ImageButton android:id=&quot;@+id/noteBtnId&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:layout_marginTop=&quot;12.0dp&quot; android:background=&quot;@drawable/notes&quot; android:contentDescription=&quot;@string/app_name&quot; android:layout_marginRight=&quot;12.0dp&quot; android:layout_alignParentRight=&quot;true&quot; android:onClick=&quot;onClick&quot; /&gt; &lt;ImageButton android:id=&quot;@+id/editBtnId&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:layout_marginTop=&quot;12.0dp&quot; android:background=&quot;@drawable/edit&quot; android:layout_toLeftOf=&quot;@id/noteBtnId&quot; android:layout_marginRight=&quot;12.0dp&quot; android:contentDescription=&quot;@string/app_name&quot; android:onClick=&quot;onClick&quot; /&gt; &lt;ImageButton android:id=&quot;@+id/downloadBtnId&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:layout_marginTop=&quot;12.0dp&quot; android:background=&quot;@drawable/download&quot; android:layout_toLeftOf=&quot;@id/editBtnId&quot; android:layout_marginRight=&quot;12.0dp&quot; android:contentDescription=&quot;@string/app_name&quot; android:onClick=&quot;onClick&quot; /&gt; &lt;/RelativeLayout&gt;</pre><p>在Action中监听ActionBar中按钮的点击事件</p><pre class="brush:java;toolbar:false">/** *实现onClick方法,在这里面监听actionbar中按钮的点击事件 * **/ publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.menuBtnId:{ showToast(this,&quot;menuBtn&quot;); } break; caseR.id.noteBtnId:{ showToast(this,&quot;noteBtn&quot;); } break; caseR.id.downloadBtnId:{ showToast(this,&quot;downloadBtn&quot;); } break; caseR.id.editBtnId:{ showToast(this,&quot;editBtn&quot;); } break; default:{ } break; } }</pre>
T:0.008578s,M:163.17 KB
返回顶部 留言