ActionBar

Action Bar

Android 3.0 (API level11)增加的特性。是一种窗口特性,标识了应用程序,提供user actions与导航modes,显示每个画面的上方,默认的系统theme Holo,都会有Action Bar存在。在menu中,提到了contextual action mode,使用ActionMode,它会临时占据action bar的位置,但与ActionBar是独立的。

ActionBar的主要目的:

1、<wbr></wbr>使一些重要的actions能够显著的显示与访问

2、<wbr></wbr>apps内,提供了一致性的导航与view间的切换

3、<wbr></wbr>很少使用的actions,提供了action overflow,画面不会凌乱

4、<wbr></wbr>为标识app提供了位置空间

ActionBar设计模式:http://developer.android.com/design/patterns/actionbar.html

ActionBar分为四个功能区域:

Action<wbr>Bar

1App iconapp的标识,如果画面不是top-level画面,可以在icon左边显示Up caret,用户能够在hierarchy中向上导航

2View control,如果app在不同的view显示数据,这个部分可以用来切换view,使用drop-down menu;如果不支持不同的view,可以来显示app title

3Action buttons,显示重要的actions

4Action overflow,使用不太频繁的actions

使用split actionbars适配不同的屏幕大小,action bar的位置可被放置在三个位置

<wbr><wbr><wbr></wbr></wbr></wbr>Main action bar<wbr><wbr><wbr></wbr></wbr></wbr>Top bar<wbr><wbr><wbr></wbr></wbr></wbr>Bottom bar

Adding the ActionBar

Android 3.0 (API level 11),如果使用默认的Theme.Holo theme,activity自动包含action bar。可以通过<uses-sdk android:minSdkVersion="11"/>android:targetSdkVersion="11" 来达到目的。

Removing the actionbar

<activity android:theme="@android:style/Theme.Holo.NoActionBar">
或设置android:windowActionBar false。其实NoActionBar也是同样的,android fwthemes.xml
<wbr><wbr><wbr></wbr></wbr></wbr><style name="Theme.Holo.NoActionBar">
<wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr><item name="android:windowActionBar">false</item>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr><item name="android:windowNoTitle">true</item>
</style>

Adding ActionItems

通过options menu。可以在menuxml资源中,对menu item增加android:showAsAction属性

Using split actionbar

split actionbar是在宽屏上,可以把action item现在是上方,窄屏显示在下方(上方留着显示navigationtitle),简单添加android:uiOptions="splitActionBarWhenNarrow<wbr>"</wbr><activity> or<application>即可

Using the App Icon forNavigation

当点击icon时,系统回调activityonOptionsItemSelected() android.R.id.home,可以这样:

<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>Intent intent = new Intent(this, HomeActivity.class);

<wbr><wbr><wbr><wbr><wbr><wbr> intent</wbr></wbr></wbr></wbr></wbr></wbr>.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

<wbr><wbr><wbr><wbr><wbr><wbr> startActivity</wbr></wbr></wbr></wbr></wbr></wbr>(intent);
回到"home" activity

Navigating up

依赖application's view hierarchy向上导航("up" indicator),可以在activityonCreate回调中

<wbr><wbr></wbr></wbr>ActionBar actionBar = getActionBar();

<wbr><wbr> actionBar</wbr></wbr>.setDisplayHomeAsUpEnable<wbr>d</wbr>(true);

Adding an ActionView

当选中一个action item时,可以显示一个action view.可以在menu item(action item)中指定android:actionLayout android:actionViewClass属性,前者是layout 资源,后者是class;另外android:showAsAction="ifRoom|collapseActionView",增加collapseActionView,否则action view默认就是显示的,而不是选中action item;
可以在onCreateOptionsMenumenu.findItem(R.id.XXXX).getActionView();来获得这个action view,从而有机会增加event hooks.menu item也可以menuItem.setOnActionExpandListene<wbr>r</wbr>来侦听action view显示与收起。Menuitem(onCreateOptionsMenu回调,通过menu.findItem(R.id.actionItem)获得)expandActionView() and collapseActionView() 显性控制action view的显示与收起.

Adding an ActionProvider

Action provider(defined by the ActionProvider class)很像action view,替换action item依一个定制的layout,但是它控制着item的后续的行为,比如action item的外观与行为,以及如果放到overflow的行为; 如:ShareActionProvider继承与AcionProvider, 可以指定一个intent,把能处理这个intent项依list来显示出来。
使用ShareActionProvider: menu item增加android:actionProviderClass="android.widget.ShareActionProvider";定义intent;如:
onCreateOptionsMenu

mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
mShareActionProvider.setShareIntent(intent);
如果你使用ShareActionProvider在一个app中多次,需要分开显示的列表,通过setShareHistoryFileName
如果自己定义Action Provider,扩展ActionProvider;实现构造函数,onCreateActionView()返回action view; onPerformDefaultAction()系统调用它,当menu itemoverflow menu中被选中。如果定制的action provider想显示menu,可以onPrepareSubMenu()

Adding NavigationTabs

当在一个activity想用navigation tabs,使用action bar's tabs来代替TabWidget(tabs页面,不直接用,使用TabHostTabWidgetTabHost的孩子),因为action bar tabs自动适配屏幕大小,当宽屏幕,直接放置main action bar上;当窄屏幕时,独立一个bar(stacked action bar)

Action<wbr>Bar

使用tab来切换fragment, 需要做下面这些事:

1、activity onCreate() callback中,首先把actionbar get出来,getActionBar();设置setNavigationMode(NAVIGATION_MODE_TABS) ,如果tab title指示显示的内容,应该把activity title隐藏setDisplayShowTitleEnabl<wbr>ed(false)</wbr>
2、增加ActionBar.Tabactionbar中,每个tab有自己的listener,来监听自己是否被选中与取消选中;在被选中的callback : onTabSelected(Tab tab, FragmentTransaction ft),fragment attach到参数ft; 取消选中时detach;并设置每个tabtext

Adding Drop-downNavigation

action bar也提供了内建的drop-downlist,可以使用它来切换显示内容,比如排序。

步骤:

ActionBar actionBar = getActionBar();

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbac<wbr>ks</wbr>(mSpinnerAdapter, mNavigationCallback);
实现SpinnerAdapter (spinner widge提供数据源)ActionBar.OnNavigationListener(仅仅一个callback来标识选中的item)是主要的工作

Styling the ActionBar

android:windowActionBarOverlay:actionbar是否会影响activitylayout,如果设置为true后,activitylayout会占据所有屏幕,action bar压住activity layout

另外可以定制Action items的背景,分割图,text颜色;Navigation tabsDrop-down lists的样式。也可以定制整个action bar的背景


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值