Android Api Demos登顶之路(二十六)Action Bar Tabs

来源:互联网 发布:淘宝办签证会有假的吗 编辑:程序博客网 时间:2024/06/05 04:04

这个demo演示了如何使用actionbar的导航标签功能。通常actionbar的tab导航功能是与fragment一起结合起来使用的。基本思路:
1.定义用来显示每个tab中具体内容的fragment
2.获取当前的actionbar
3.向actionbar中添加tab(设置tab的属性,注册tab的切换监听)
4.从actionbar中删除tab
5.设置actionbar的导航模式和显示参数
MainActivity

public class MainActivity extends Activity {    private ActionBar bar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取到当前的actionbar        bar=getActionBar();    }    /**     * 向actionbar中添加新的导航标签     *      * @param v     */    @SuppressWarnings("deprecation")    public void addNewTab(View v) {        int tabCounts = bar.getTabCount();        String text = "Tab" + tabCounts;        bar.addTab(bar                .newTab()                .setText(text)//设置tab的标题,会自动转换成大写                .setTabListener(                        new TabActionListener(new TabContentFragment(text))));//设置导航标签的切换监听    }    /**     * 切换监听类     * @author aaaa     *     */    @SuppressWarnings("deprecation")    private class TabActionListener implements ActionBar.TabListener {        /*         * 将用来显示每个Tab的具体内容的fragment通过构造方法的形式传入         */        private TabContentFragment tabFragment;        public TabActionListener(TabContentFragment fragment) {            super();            this.tabFragment = fragment;        }        @Override        public void onTabSelected(Tab tab, FragmentTransaction ft) {            //向FrameLayout中添加当前tab的fragment            ft.add(R.id.fragment_content, tabFragment);        }        @Override        public void onTabUnselected(Tab tab, FragmentTransaction ft) {            //在当前tab失去焦点时,移除tab的fragment            ft.remove(tabFragment);        }        @Override        public void onTabReselected(Tab tab, FragmentTransaction ft) {            //当重复选择当前标签时显示一个吐司            Toast.makeText(MainActivity.this, "Reselected", 1).show();        }    }    /**     * 定义一个Fragment,将其添加到FrameLayout中用来显示每个标签的具体内容     * 本例只是示例地显示了一下当前标签的标题内容     * @author aaaa     *     */    private class TabContentFragment extends Fragment {        private String mText;        public TabContentFragment(String text) {            super();            this.mText = text;        }        public String getmText() {            return mText;        }        @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container,                Bundle savedInstanceState) {            View fragView = inflater.inflate(R.layout.actionbar_tab_content,                    container, false);            TextView textView = (TextView) fragView.findViewById(R.id.text);            textView.setText(mText);            return fragView;        }    }    /**     * 设置actionbar的导航模式和显示参数     * @param v     */    @SuppressWarnings("deprecation")    public void taggleTabMode(View v) {        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(ActionBar.DISPLAY_SHOW_HOME,                    ActionBar.DISPLAY_SHOW_TITLE);            /*System.out.println("DISPLAY_SHOW_HOME:"+ActionBar.DISPLAY_SHOW_HOME);            System.out.println("DISPLAY_SHOW_CUSTOM:"+ActionBar.DISPLAY_SHOW_CUSTOM);            System.out.println("DISPLAY_SHOW_TITLE:"+ActionBar.DISPLAY_SHOW_TITLE);            System.out.println("DISPLAY_HOME_AS_UP:"+ActionBar.DISPLAY_HOME_AS_UP);            System.out.println("DISPLAY_USE_LOGO:"+ActionBar.DISPLAY_USE_LOGO);*/        }    }    //删除最后一个导航标签    public void removeLastTab(View v){        int tabCounts=bar.getTabCount();        if(tabCounts>0){            bar.removeTabAt(tabCounts-1);        }    }    //删除所有导航标签    public void removeAllTabs(View v){        if(bar.getTabCount()>0){            bar.removeAllTabs();        }    }}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    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="0dp"        android:layout_weight="1">    </FrameLayout>    <LinearLayout         android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:orientation="vertical">        <Button             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="Add new tab"            android:onClick="addNewTab"/>        <Button             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="Remove last tab"            android:onClick="removeLastTab"/>        <Button             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="Toggle tab mode"            android:onClick="taggleTabMode"/>        <Button             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="Remove all tabs"            android:onClick="removeAllTabs"/>    </LinearLayout></LinearLayout>

action_bar_content.xml

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/text" ></TextView>
0 0