I would like to have an ActionBar with custom navigation where the custom views look like the standard action bar tabs. I know it sounds like reinventing the wheel but it me
By using hierarchy viewer I think we've worked out how to do this. It turns out it wasn't difficult at all. You need a ScrollingTabContainerView from the ABS library and you can add tabs to that.
public class MainActivity extends SherlockActivity implements ActionBar.TabListener {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ScrollingTabContainerView root = new ScrollingTabContainerView(this);
ActionBar.Tab tab1 = getSupportActionBar().newTab();
tab1.setText("TAB 1");
tab1.setTabListener(this);
ActionBar.Tab tab2 = getSupportActionBar().newTab();
tab2.setText("TAB 2");
tab2.setTabListener(this);
root.addTab(tab1, 0, true);
root.addTab(tab2, 1, false);
getSupportActionBar().setCustomView(root);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setTitle("App Title");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add("MENU ITEM 1");
menu.add("MENU ITEM 2");
return true;
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
//To change body of implemented methods use File | Settings | File Templates.
}
I hope this helps someone.
//enabling embedded tabs
//pre-ICS
if (actionBarSherlock instanceof ActionBarImpl) {
enableEmbeddedTabs(actionBarSherlock);
//ICS and forward
} else if (actionBarSherlock instanceof ActionBarWrapper) {
try {
Field actionBarField = actionBarSherlock.getClass().getDeclaredField("mActionBar");
actionBarField.setAccessible(true);
enableEmbeddedTabs(actionBarField.get(actionBarSherlock));
} catch (Exception e) {
Log.e(TAG, "Error enabling embedded tabs", e);
}
}
//helper method
private void enableEmbeddedTabs(Object actionBar) {
try {
Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
setHasEmbeddedTabsMethod.setAccessible(true);
setHasEmbeddedTabsMethod.invoke(actionBar, true);
} catch (Exception e) {
Log.e(TAG, "Error marking actionbar embedded", e);
}
}
this code works perfectly . Tried it in my app . for further reference - https://groups.google.com/forum/#!topic/actionbarsherlock/hmmB1JqDeCk