Actionbarsherlock Demo 浅析 :Static Attachment
Static Attachment(静态连接):
ActionBarSherlock mSherlock = ActionBarSherlock.wrap(this);//方法返回与Actionbar交互的ActionBarSherlock实例。 @Override protected void onCreate(Bundle savedInstanceState) { setTheme(SampleList.THEME); //Used for theme switching in samples super.onCreate(savedInstanceState); /* * 大多数与其他系统的交互作用是通过这个实例来完成的。内容,标题,行动栏和菜单的扩展都可以完成。 * * 所有的基本活动都使用这个类来提供正常的动作条功能,这样他们就可以使用这种静态的连接方法来做所有的事情。 * * 为了正确设置布局包装和调度菜单事件(如果需要的话)需要调用setContentView或类似getactionbar。 */ mSherlock.setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);// mSherlock.setContentView(R.layout.text); ((TextView)findViewById(R.id.text)).setText(R.string.static_attach_content); }
setUiOptions( ):设置一些影响UI界面的选项。
ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW:表示当actionbar太小的时候(放不下所有的图标),action bar 应该将所有的action item 放置在一个独立的bar上(也就是在底部显示)。其实这个标志就是调用分离的bar来显示action items。
public class StaticAttachment extends Activity implements OnCreateOptionsMenuListener
因为这个Activity是个原生的Activity,没有继承SherlockActivity,所以需要调用wrap来包装这个activity,让它获得actionbarsherlock来操作ui。
/* * 如果想要使用具备static attachment的action items,需要去重新调度创建,准备阶段和需要响应的事件。如果你还想要使用static attachment,那就必须创建一个基本的 * activity,然后去重写这三个方法中的一个或多个。 */ @Override public boolean onCreateOptionsMenu(android.view.Menu menu) { return mSherlock.dispatchCreateOptionsMenu(menu); } dispatchCreateOptionsMenu(Menu):Menu参数代表原生的Activity菜单,所谓原生的菜单其实就是系统自带的menu样式,但是我们现在要用自定义的menu去替换他。因为Activity实现了OnCreateOptionsMenuListener接口,所以该方法会触发这个监听器,从而系统会去调用onCreateOptionsMenu(Menu menu)方法。 /* * *为了能够去接收这些事件,需要去实现一个来自ActionBarSherlock的接口,这个接口会回调相应的函数来处理这个事件。 *可以实现三种接口,他们对应三种不同的菜单事件。 * *需要记住的是这些接口父类都没有实现,所以你需要返回一个有意义的值给父类,父类才能知道该怎么做。 */ @Override public boolean onCreateOptionsMenu(Menu menu) { //Used to put dark icons on light action bar boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light; menu.add("Save") .setIcon(isLight ? R.drawable.ic_compose_inverse : R.drawable.ic_compose) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); menu.add("Search") .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); menu.add("Refresh") .setIcon(isLight ? R.drawable.ic_refresh_inverse : R.drawable.ic_refresh) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); return true; }