`
qilixiang012
  • 浏览: 202727 次
文章分类
社区版块
存档分类
最新评论

Android 导航类型

 
阅读更多

下拉式导航:

    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,如下所示
                          
		//当导航被选中时激发该方法
		@Override
		public 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页面的FrameLayout
	TabHost myTabhost=this.getTabHost();
	//从TabActivity上面获取放置Tab的TabHost
	LayoutInflater.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);
		}

		@Override
		public 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;
		}

		@Override
		public int getCount() {
			// Show 3 total pages.
			return 3;
		}

		@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;
		}


分享到:
评论

相关推荐

    Android键盘键名和键值列表 Android虚拟键码表

    Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 ...

    基于高德定位导航的Android大作业.zip

    主界面:登录后,通过定位获取当前的位置信息,并在地图上展示出来,底部提供POI类型的快速导航搜索功能。 搜索界面:点击搜索栏,进入搜索界面,可以选择快速搜索分类,列表展示出该搜索类别,选择搜索结果,展示...

    Android之实现系统联系人软件的分组和字母表导航效果

    模仿系统联系人的字母导航效果; 联系人分章节显示、ListView快速滑动显示联系人首字母、附带字母表快速查找的例子, 查阅网络资源,实现方式都是比较复杂,尤其有些还实现了SectionIndex接口,很多人不怎么能理解...

    基于Android的底部导航组件设计源码

    本项目是一个基于Android的底部导航组件设计,包含57个文件,主要文件类型包括XML配置文件、图片、Java源代码、Git忽略文件、Gradle构建文件、属性文件、PRO配置文件、JAR包、Gradlew脚本和BAT批处理文件。...

    (基于android的毕业设计)高德校内导航出行(源码)

    主界面:登录后,通过定位获取当前的位置信息,并在地图上展示出来,底部提供POI类型的快速导航搜索功能。 搜索界面:点击搜索栏,进入搜索界面,可以选择快速搜索分类,列表展示出该搜索类别,选择搜索结果,展示...

    Node.js-一行代码实现android底部导航栏

    主要功能点 构建者模式链式设置导航栏条目 自定义导航栏的字体大小图片大小 支持纯文字类型 支持底部按钮点击事件 代码简洁不到300行,只有一个类 直接拿来用

    基于高德导航的Android大作业校园助手App开发(源码+数据库+演示视频).rar

    主界面:登录后,通过定位获取当前的位置信息,并在地图上展示出来,底部提供POI类型的快速导航搜索功能。 搜索界面:点击搜索栏,进入搜索界面,可以选择快速搜索分类,列表展示出该搜索类别,选择搜索结果,展示...

    新版Android开发教程.rar

    � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。 � Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA ...

    Android-Carousel-Notification允许您进行轮播类型通知用户可以在通知内导航

    Carousel-Notification允许您进行轮播类型通知,用户可以在通知内导航

    Google Android SDK开发范例大全(完整版)

    它包括必需的类名和应用程序能够处理的事件类型,以及运行应用程序所需的许可。例如,如果应用程序需要访问网络 — 例如为了下载一个文件 — 那么 manifest 文件中必须显式地列出该许可。很多应用程序可能启用了这个...

    Android Online Radio v8.0 在线播放应用程序收听现场广播 Android Studio JAVA项目源码

    Android在线广播应用程序是在Android设备上收听现场广播的应用程序。... 导航菜单 最新UI With Material Design 广告网络(Admob、Facebook、Startapp、Wortise、Ironsource、AppLovin) Android Studio代码

    精通ANDROID 3(中文版)1/2

    第1章 Android计算平台简介  1.1 面向新PC的全新平台  1.2 Android的历史  1.3 Dalvik VM剖析  1.4 理解Android软件栈  1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 ...

    Android studio+ASPnet信息安全技术应用源码带文档

    后台服务端实现的功能包括:电影院管理、购买用户管理、影片发布、影片类型、订单情况、导航菜单、角色管理以及系统用户等功能。 二、注意事项 1、开发环境为Visual Studio 2010,数据库为SqlServer2012,使用.net ...

    基于高德导航的Android大作业

    本课题客户端采用JAVA语言,通过Android studio作为开发工具,服务端采用JAVA语言,通过IDEA作为开发工具进行开发,数据库选用MySql。 《基于位置的信...QQ浏览器文件服务 周书众71/3:52 开启自动备份 sa 四、评分...

    疯狂Android讲义源码

     第1章 Android应用与开发环境 1  1.1 Android的发展和历史 2  1.1.1 Android的发展和简介 2  1.1.2 Android平台架构及特性 3  1.2 搭建Android开发环境 5  1.2.1 下载和安装Android SDK 5  1.2.2 安装...

    viewPager android

    viewpager,android 3.0开始支持,可实现导航,页面菜单,页面切换等。demo很强大,两种应用类型

    :speedboat:浮动导航视图,用于在Android上动态列出商品。-Android开发

    潜艇完全可定制的浮动导航视图,可在Android上动态列出物品。 在您的Gradle项目中添加以下代码到您的root build.gradle文件(不是您的mod Submarine完全可自定义的浮动导航视图中,以便在Android上动态列出商品。...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 ...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 ...

Global site tag (gtag.js) - Google Analytics