ActionBarSherlock包的使用
ActionBarSherlock包使的在低版本Android平台中可以使用ActionBar。该包的使用参见:http://actionbarsherlock.com/usage.html
When creating an activity to use the action bar on all versions of Android, you must declare your activity to extend any of the activity classes that start with 'Sherlock' (e.g., SherlockActivity
, SherlockFragmentActivity
). Interaction with the action bar is handled by calling getSupportActionBar()
(instead of getActionBar()
).
在项目中引入ABsherlock包后:
step1:Activity extend SherlockActivity,重写getSupportActionBar()方法;
step2:改变Activity的theme,必须使用ABsherlock的主题;
使用ABS之前(2.3.6)
使用ABS之后
注意:为了支持3.0之前的平台使用AB,包使用了许多与android系统本身自带的部件相同名字的类,主要有:
com.actionbarsherlock.app.ActionBar
com.actionbarsherlock.view.Menu
com.actionbarsherlock.view.MenuItem
com.actionbarsherlock.view.MenuInflater
在代码中务必保证导入了正确的包名。
此时,按下菜单键,没有任何菜单出来,我们需要重写onCreateOptionsMenu()和onOptionsItemSelected()方法。
@Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu subMenu1 = menu.addSubMenu("Action Item"); subMenu1.add(0, MENU, 0, "MENU"); subMenu1.add(0, MENU1, 0, "MENU1"); subMenu1.add(0, MENU2, 0, "MENU2"); MenuItem subMenu1Item = subMenu1.getItem(); subMenu1Item.setIcon(R.drawable.ic_title_share_default); // 使得subMenu1Item成为AB右上角的下拉菜单 subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); SubMenu subMenu2 = menu.addSubMenu("Overflow Item"); subMenu2.add(0, MENU3, 0, "MENU3"); subMenu2.add(0, MENU4, 0, "MENU4"); subMenu2.add(0, MENU5, 0, "MENU5"); subMenu2.add(0, MENU6, 0, "MENU6"); MenuItem subMenu2Item = subMenu2.getItem(); subMenu2Item.setIcon(R.drawable.ic_compose); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home || item.getItemId() == 0) { return false; } Toast.makeText(this, "You've clicked the item: \"" + item.getTitle() + "\"", Toast.LENGTH_SHORT).show(); return true; }
附:实践过程中遇到的问题与解决方法
1、“Jar mismatch! Fix your dependencies”错误解决。
这是因为两个项目的jar包(android-support-v4.jar)不一致。 解决方法是把两个项目中的jar改为相同的jar包。比如把其他项目中的v4jar包,拿出来分别放到这两个项目中去,问题即可解决!