您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Android应用开发中Action bar编写的入门教程

2024/6/19 0:32:24发布25次查看
从android 3.0开始除了我们重点讲解的fragment外,action bar也是一个重要的内容,action bar主要是用于代替传统的标题栏,对于android平板设备来说屏幕更大它的标题使用action bar来设计可以展示更多丰富的内容,方便操控。
action bar主要功能包含:
1. 显示选项菜单
2. 提供标签页的切换方式的导航功能,可以切换多个fragment.
3. 提供下拉的导航条目.
4. 提供交互式活动视图代替选项条目
5. 使用程序的图标作为返回home主屏或向上的导航操作。
提示在你的程序中应用actionbar需要注意几点,sdk和最终运行的固件必须是android 3.0即honeycomb,在androidmanifest.xml文件中的uses-sdk元素中加入android:minsdkversion 或android:targetsdkversion,类似

如果需要隐藏action bar可以在你的activity的属性中设置主题风格为notitlebar在你的manifest文件中,下面的代码在3.0以前是隐藏标题,而在3.0以后就是隐藏actionbar了,代码为:

一、添加活动条目 action items
对于活动条目大家可以在下图看到android 3.0的标题右部分可以变成工具栏,下面的save和delete就是两个action items活动条目。
下面是一个menu的layout布局文件代码

而其他代码类似activity中的menu,比如
@override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case android.r.id.home: // 当action bar的图标被单击时执行下面的intent intent intent = new intent(this, android123.class); startactivity(intent); break; } return super.onoptionsitemselected(item); }
对于actionbar的创建,可以在你的activity中重写onstart方法:
@override protected void onstart() { super.onstart(); actionbar actionbar = this.getactionbar(); actionbar.setdisplayoptions(actionbar.display_home_as_up, actionbar.display_home_as_up); }
调用getactionbar方式在你的activity的oncreate中时需要注意必须在调用了setcontentview之后。
二、添加活动视图 action view
对于actionview,我们可以在menu的布局文件使用中来自定义searchview布局,如下:

也可以直接指定android系统中的searchview控件,那么这时menu_search的代码要这样写:

大家注意上面的两种方法中一个属性是actionlayout制定一个layout xml布局文件,一个是actionviewclass指定一个类,最终调用可以在activity中响应oncreateoptionsmenu方法映射这个menu布局即可.
@override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.options, menu); searchview searchview = (searchview) menu.finditem(r.id.menu_search).getactionview(); return super.oncreateoptionsmenu(menu); }
三、添加标签 tabs
在actionbar中实现标签页可以实现android.app.actionbar.tablistener ,重写ontabselected、ontabunselected和ontabreselected方法来关联fragment。代码如下:
private class mytablistener implements actionbar.tablistener { private tabcontentfragment mfragment; public tablistener(tabcontentfragment fragment) { mfragment = fragment; } @override public void ontabselected(tab tab, fragmenttransaction ft) { ft.add(r.id.fragment_content, mfragment, null); } @override public void ontabunselected(tab tab, fragmenttransaction ft) { ft.remove(mfragment); } @override public void ontabreselected(tab tab, fragmenttransaction ft) { } }
接下来我们创建actionbar在activity中,代码如下;
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); final actionbar actionbar = getactionbar(); //提示getactionbar方法一定在setcontentview后面 actionbar.setnavigationmode(actionbar.navigation_mode_tabs); actionbar.setdisplayoptions(0, actionbar.display_show_title); fragment artistsfragment = new artistsfragment(); actionbar.addtab(actionbar.newtab().settext(r.string.tab_artists).settablistener(new tablistener(artistsfragment))); fragment albumsfragment = new albumsfragment(); actionbar.addtab(actionbar.newtab().settext(r.string.tab_albums).settablistener(new tablistener(albumsfragment))); }
四、添加下拉导航 drop-down navigation:
创建一个spinneradapter提供下拉选项,和tab方式不同的是drop-down只需要修改下setnavigationmode的模式,将actionbar.navigation_mode_tabs改为actionbar.navigation_mode_list,最终改进后的代码为
actionbar actionbar = getactionbar(); actionbar.setnavigationmode(actionbar.navigation_mode_list); actionbar.setlistnavigationcallbacks(mspinneradapter, mnavigationcallback);
上面我们通过setlistnavigationcallbacks方法绑定一个spinneradapter控件,具体的onnavigationlistener代码示例为;
monnavigationlistener = new onnavigationlistener() { string[] strings = getresources().getstringarray(r.array.action_list); @override public boolean onnavigationitemselected(int position, long itemid) { listcontentfragment newfragment = new listcontentfragment(); fragmenttransaction ft = openfragmenttransaction(); ft.replace(r.id.fragment_container, newfragment, strings[position]); ft.commit(); return true; } };
而其中的listcontentfragment的代码为:
public class listcontentfragment extends fragment { private string mtext; @override public void onattach(activity activity) { super.onattach(activity); mtext = gettag(); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { textview text = new textview(getactivity()); text.settext(mtext); return text; } }
五、实现切换tabs标签;
activity代码:
public class actionbartabs extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.action_bar_tabs); } public void onaddtab(view v) { final actionbar bar = getactionbar(); final int tabcount = bar.gettabcount(); final string text = tab + tabcount; bar.addtab(bar.newtab().settext(text) .settablistener(new tablistener(new tabcontentfragment(text)))); } public void onremovetab(view v) { final actionbar bar = getactionbar(); bar.removetabat(bar.gettabcount() - 1); } public void ontoggletabs(view v) { final actionbar bar = getactionbar(); if (bar.getnavigationmode() == actionbar.navigation_mode_tabs) { bar.setnavigationmode(actionbar.navigation_mode_standard); bar.setdisplayoptions(actionbar.display_show_title, actionbar.display_show_title); } else { bar.setnavigationmode(actionbar.navigation_mode_tabs); bar.setdisplayoptions(0, actionbar.display_show_title); } } public void onremovealltabs(view v) { getactionbar().removealltabs(); } private class tablistener implements actionbar.tablistener { private tabcontentfragment mfragment; public tablistener(tabcontentfragment fragment) { mfragment = fragment; } public void ontabselected(tab tab, fragmenttransaction ft) { ft.add(r.id.fragment_content, mfragment, mfragment.gettext()); } public void ontabunselected(tab tab, fragmenttransaction ft) { ft.remove(mfragment); } public void ontabreselected(tab tab, fragmenttransaction ft) { toast.maketext(actionbartabs.this, reselected!, toast.length_short).show(); } } private class tabcontentfragment extends fragment { private string mtext; public tabcontentfragment(string text) { mtext = text; } public string gettext() { return mtext; } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view fragview = inflater.inflate(r.layout.action_bar_tab_content, container, false); textview text = (textview) fragview.findviewbyid(r.id.text); text.settext(mtext); return fragview; } } }
涉及的布局文件action_bar_tabs.xml代码为:

布局文件action_bar_tab_content.xml;

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product