ActionBar示例代码 (二)

ActionBar相关的示例代码第二部分分为两种,作为Android 3.0的重要特性我们直接看代码:

一、使用菜单资源构造

public class ActionBarMechanics extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  
    menu.add("Normal item");

    MenuItem actionItem = menu.add("Action Button");
    actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    actionItem.setIcon(android.R.drawable.ic_menu_share);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();
    return true;
}

}

二、作为Tab切换Fragment

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代码为

<?xml version="1.0" encoding="utf-8"?>









涉及布局文件action_bar_tab_content.xml的代码为

<?xml version="1.0" encoding="utf-8"?>