转载请注明出处:http://blog.csdn.net/droyon/article/details/9452557
ActionBar可以加Tab,这也是我们经常使用的功能,在android提供的demos里面提供了测试例子。
我们来看一下效果:
关键代码:
添加Tab:
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))));
}
删除最后一个Tab(当然你也可以指定Tab)
public void onRemoveTab(View v){
final ActionBar bar = getActionBar();
bar.removeTabAt(bar.getTabCount()-1);
}
切换ActionBar模式:
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);
}
}
删除所有Tab
public void onRemoveAllTabs(View v){
getActionBar().removeAllTabs();
}
action_bar_tabs.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout android:id="@+id/fragment_content"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<LinearLayout android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="vertical">
<Button android:id="@+id/btn_add_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_add_tab"
android:onClick="onAddTab" />
<Button android:id="@+id/btn_remove_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_remove_tab"
android:onClick="onRemoveTab" />
<Button android:id="@+id/btn_toggle_tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_toggle_tabs"
android:onClick="onToggleTabs" />
<Button android:id="@+id/btn_remove_all_tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_remove_all_tabs"
android:onClick="onRemoveAllTabs" />
</LinearLayout>
</LinearLayout>
action_bar_tab_content.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
ActionBarTab.java
package com.android.myapp;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
public class ActionBarTab extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.action_bar_tabs);
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_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;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_content, mFragment,null);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(mFragment);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(ActionBarTab.this, "Reselected", Toast.LENGTH_LONG).show();
}
}
private class TabContentFragment extends Fragment {
private String mText;
public TabContentFragment(String text){
mText = text;
}
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle saveInstance){
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;
}
}
}