Android 导航类型

来源:互联网 发布:淘宝店铺子账号干嘛的 编辑:程序博客网 时间:2024/05/16 05:41

下拉式导航:

    final ActionBar actionBar = getSupportActionBar();        //设置ActionBar是否显示标题        actionBar.setDisplayShowTitleEnabled(false);        //设置导航模式,使用List导航        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);        // 为导航设置列表项数据源和监听器        actionBar.setListNavigationCallbacks(                // Specify a SpinnerAdapter to populate the dropdown list.                new ArrayAdapter<String>(//为导航设置列表项                        actionBar.getThemedContext(),                        android.R.layout.simple_list_item_1,                        android.R.id.text1,                        new String[] {                                getString(R.string.title_section1),                                getString(R.string.title_section2),                                getString(R.string.title_section3),                        }),                this);//这个this为导航设置监听器ActionBar.OnNavigationListener,如下所示                          //当导航被选中时激发该方法@Overridepublic boolean onNavigationItemSelected(int position, long id) {    // When the given dropdown item is selected, show its contents in the    // container view.    getSupportFragmentManager().beginTransaction()            .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))            .commit();    return true;}//内部类,根据所选列表id动态创建并返回的Fragment类public static class PlaceholderFragment extends Fragment {}

ActionBar实现Tab导航:

//设置ActionBar 的Tabs导航        final ActionBar actionBar = getSupportActionBar();        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        //FragmentPaperAdapter对象(下面附上),这个适配器根据选择返回对应的Fragment        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());//ViewPaper是Fragment的容器,可以同时管理多个Fragment,并允许多个Fragment切换时提供动画效果,需要为它设置适配器FragmentPagerAdapter        // Set up the ViewPager with the sections adapter.        mViewPager = (ViewPager) findViewById(R.id.pager);        mViewPager.setAdapter(mSectionsPagerAdapter);        // 为ViewPaper设置监听器,当ViewPaper显示的Fragment发生改变时激发该方法        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {            @Override            public void onPageSelected(int position) {                actionBar.setSelectedNavigationItem(position);            }        });        // 遍历paperAdapter对象所包含的全部Fragment,每个Fragment对应创建一个Tab标签,并设置ActionBar的事件监听接口对象TabListener        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {            // Create a tab with text corresponding to the page title defined by            // the adapter. Also specify this Activity object, which implements            // the TabListener interface, as the callback (listener) for when            // this tab is selected.            actionBar.addTab(                    actionBar.newTab()                            .setText(mSectionsPagerAdapter.getPageTitle(i))                            .setTabListener(this)            );        }        public class SectionsPagerAdapter extends FragmentPagerAdapter {    public SectionsPagerAdapter(FragmentManager fm) {        super(fm);    }获取第position位置的Fragment    @Override    public Fragment getItem(int position) {        // getItem is called to instantiate the fragment for the given page.        // Return a PlaceholderFragment (defined as a static inner class below).        return PlaceholderFragment.newInstance(position + 1);    }//该方法的返回值i表明该Adapter总共包括多少个Fragment    @Override    public int getCount() {        // Show 3 total pages.        return 3;    }//该方法的返回值决定每个Fragment的标题    @Override    public CharSequence getPageTitle(int position) {        Locale l = Locale.getDefault();        switch (position) {            case 0:                return getString(R.string.title_section1).toUpperCase(l);            case 1:                return getString(R.string.title_section2).toUpperCase(l);            case 2:                return getString(R.string.title_section3).toUpperCase(l);        }        return null;    }}

TabHost实现导航,分两种:

使用Tab标签页的一般步骤
首先要设计所有的分页的界面布局
Activity继承TabActivity
调用TabActivity的getTabHost()方法获得TabHost对象
通过TabHost创建Tab


TabHost:标签控件核心类,标签的集合
TabHost.TabSpec:标签对象,可以装载View视图。如一个控件或布局

代码说明:

//声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayoutTabHost myTabhost=this.getTabHost();//从TabActivity上面获取放置Tab的TabHostLayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true);//from(this)从这个TabActivity获取LayoutInflater//R.layout.main 存放Tab布局  //通过TabHost获得存放Tab标签页内容的FrameLayout  //是否将inflate 拴系到根布局元素上在TabHost创建一个标签,然后设置一下标题/图标/标签页布局  myTabhost.addTab(myTabhost.newTabSpec("TT")// 造一个新标签TT        .setIndicator("KK",getResources().getDrawable(R.drawable.ajjc))// 设置一下显示的标题为KK,设置一下标签图标为ajjc            .setContent(R.id.widget_layout_red));  //设置一下该标签页的布局内容为R.id.widget_layout_red,这是FrameLayout中的一个子Layout

NavigationDrawer实现Tab导航:

//extends Fragment实现对应导航的回调方法public void onNavigationDrawerItemSelected(int position) implements NavigationDrawerFragment.NavigationDrawerCallbacks  mNavigationDrawerFragment = (NavigationDrawerFragment)                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);        mTitle = getTitle();        // Set up the drawer.        mNavigationDrawerFragment.setUp(                R.id.navigation_drawer,                (DrawerLayout) findViewById(R.id.drawer_layout));         //返回对应的Fragment对象                @Override    public void onNavigationDrawerItemSelected(int position) {        // update the main content by replacing fragments        FragmentManager fragmentManager = getSupportFragmentManager();        fragmentManager.beginTransaction()                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))                .commit();    }        //该方法的返回值决定每个Fragment的标题    public void onSectionAttached(int number) {        switch (number) {            case 1:                mTitle = getString(R.string.title_section1);                break;            case 2:                mTitle = getString(R.string.title_section2);                break;            case 3:                mTitle = getString(R.string.title_section3);                break;        }    }               //设置导航打开时的导航文字显示public void restoreActionBar() {        ActionBar actionBar = getSupportActionBar();        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);        actionBar.setDisplayShowTitleEnabled(true);        actionBar.setTitle(mTitle);    }

ScrollableTab实现Tab导航:

// Create the adapter that will return a fragment for each of the three// primary sections of the app.mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());// Set up the ViewPager with the sections adapter.mViewPager = (ViewPager) findViewById(R.id.pager);mViewPager.setAdapter(mSectionsPagerAdapter);public class SectionsPagerAdapter extends FragmentPagerAdapter {public SectionsPagerAdapter(FragmentManager fm) {super(fm);}@Overridepublic Fragment getItem(int position) {// getItem is called to instantiate the fragment for the given page.// Return a DummySectionFragment (defined as a static inner class// below) with the page number as its lone argument.Fragment fragment = new DummySectionFragment();Bundle args = new Bundle();args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);fragment.setArguments(args);return fragment;}@Overridepublic int getCount() {// Show 3 total pages.return 3;}@Overridepublic CharSequence getPageTitle(int position) {Locale l = Locale.getDefault();switch (position) {case 0:return getString(R.string.title_section1).toUpperCase(l);case 1:return getString(R.string.title_section2).toUpperCase(l);case 2:return getString(R.string.title_section3).toUpperCase(l);}return null;}


1 0
原创粉丝点击