Android里的底部页面的切换的实现的三种方式
2014-09-15 19:09
513 查看
底部页面的切换
实现方式有三种:
1. tabhost+Activity的方式:
1.将MainActivity继承TabActivity2.在setContentView();(不一定紧跟随)之后获取TabHost对象<只有继承了TabActivity才能获取得到TabHost对象> getTabHost()
3.创建Intent对象用来显示每个Tab页面.
4.创建tabSpec对象用来添加进tabHost里的:
TabSpec tabSpec1 = tabHost.newTabSpec("two").setIndicator("", getResources().getDrawable(R.drawable.home_press2)) .setContent(intent1);
其中:设置标签和图标(setIndicator),设置内容(setContent)
5.添加进tabHost里
tabHost.add(tabSpec1);
6.注意的是对main.xml文件的编写:tabHost使用了特殊的标签id定义,在main.xml文件一定是tabHost标签包裹起来的,注意id:
<TabHost 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" tools:context=".MainActivity" android:id="@android:id/tabhost"> <!--注意这的id:tabhost,tabs,tabcontent都是特有的一定要有,否则回运行异常--> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_alignParentBottom="true" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </TabHost>
7.关于tabhost+Activity的方式:这种方式以及废弃掉了,因为实现它需要一个界面一个Activity,在Android中Activity属于重量级空间,最好不轻易使用,所以抛弃掉了.
2.fragment嵌套fragment:
在早期开发过程中,fragment是不能嵌套fragment的。是在4.2以后才有的,然后在v13包里面才有这个方法。
如何使用fragment嵌套fragment的开发方式的话,布局层次会嵌套太深,导致程序崩掉
3.ViewPage:
1.使用Frgment和Viewpage实现标签布局(没有用框架的)1.因为需要用到Frgment所以MainActivity继承下FrgmentActivity
2.因为要需要在操作栏中添加标签,必须要实现ActionBar.TabListener这个类--->可能会不能自动导包
import android.app.ActionBar; public class MainActivity extends FragmentActivity implements ActionBar.TabListener{ //一下是需实现ActionBar.TabListener接口的方法 public void onTabSelected(Tab tab, FragmentTransaction ft) {} public void onTabUnselected(Tab tab, FragmentTransaction ft) {} public void onTabReselected(Tab tab, FragmentTransaction ft) {} }
3.MainActivity布局文件的编写(注意,这个文件除了viewpage其他元素都不写):
<android.support.v4.view.ViewPager 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:id="@+id/main_vp" tools:context=".MainActivity" > </android.support.v4.view.ViewPager>
4.创建便签碎片(tab fragment)提供视图的FragmentPagerAdapter类(适配器)
class TabsPagerAdapter extends FragmentPagerAdapter{ public TabsPagerAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub } @Override public Fragment getItem(int arg0) { switch(arg0){ case 0: return new TopRatedFragment(); case 1: return new GameFragment(); case 2: return new MovesFragment(); } return null; } @Override public int getCount() { // TODO Auto-generated method stub return 3; } }
5.为ActionBar添加Tab在不使用其他UI元素,譬如TabHost的前提下显示标签,其实在操作栏中有一个内置的功能,那就是添加标签。很简单的,我们需要做的就是允许操作栏使用setNavigationMode(ActionBar.NAVIGATIONMODETABS)方法。
private String[] tabs = {"Top Rated", "Games", "Movies"}; private ActionBar actionBar; actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Adding Tabs for (String tab_name : tabs) { actionBar.addTab(actionBar.newTab() .setText(tab_name) .setTabListener(this));//先前已经实现了该监听接口 }
6.为标签添加视图
//写个基本的Fragment的类,为TopRatedFragment(),GameFragment(),MovesFragment()提供方便,它们就可以直接实现initData(),initView()方法就得了. public abstract class BaseFragment extends Fragment { private String TAG = "BaseFragment"; public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i(TAG, this.getClass().getSimpleName()+"====onCreate"); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i(TAG, this.getClass().getSimpleName()+"====onCreateView"); View view = initView(); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i(TAG, this.getClass().getSimpleName()+"====onActivityCreated"); initData(); super.onActivityCreated(savedInstanceState); } public abstract void initData(); public abstract View initView(); }
2.用框架SlidingMenu实现
1.SlidingMenu属性的一些介绍:
menu.setMode(SlidingMenu.LEFT);//设置左滑菜单 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动 menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片 menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度 menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度 menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上 menu.setMenu(R.layout.menu_layout);//设置menu的布局文件 menu.toggle();//动态判断自动关闭或开启SlidingMenu menu.showMenu();//显示SlidingMenu menu.showContent();//显示内容 menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开 关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件 menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件 左右都可以划出SlidingMenu菜单只需要设置 menu.setMode(SlidingMenu.LEFT_RIGHT);属性,然后设置右侧菜单的布局文件 menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片 设置SlidingMenu属性 sm = getSlidingMenu(); //如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHT sm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有 sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源 sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度 //sm.setBehindWidth(200);//设置菜单的宽 sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度 sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域 支持右侧划出菜单: //SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。 sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单 sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源 //右侧SlidingMenu的Fragment getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit(); slidingMenu = getSlidingMenu(); //设置是左滑还是右滑,还是左右都可以滑 slidingMenu.setMode(SlidingMenu.LEFT_RIGHT); //设置阴影宽度 slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40); //设置左菜单阴影图片 slidingMenu.setShadowDrawable(R.drawable.shadow); //设置右菜单阴影图片 slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow); //设置菜单占屏幕的比例 slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5); //设置滑动时菜单的是否淡入淡出 slidingMenu.setFadeEnabled(true); //设置淡入淡出的比例 slidingMenu.setFadeDegree(0.4f); //设置滑动时拖拽效果 slidingMenu.setBehindScrollScale(0); //设置要使菜单滑动,触碰屏幕的范围 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
2.应用: 1.将Activity页继承SlidingFragmentActivity 2.设置边侧拉出菜单布局和主页面内容布局 3.写个dimens.xml文件,用来配置SlidingMenu的一些配置.
<!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="slidingmenu_offset">180dp</dimen> <dimen name="list_padding">10dp</dimen> <dimen name="shadow_width">5dp</dimen> <dimen name="bottom_tab_padding_drawable">2.0dip</dimen> <dimen name="bottom_tab_padding_up">2.0dip</dimen> <dimen name="bottom_tab_font_size">14.0sp</dimen> </resources>
4.写个shadow.xml文件用来配置阴影的一些信息
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:endColor="#5A000000" android:centerColor="#2D000000" android:startColor="#00000000" /> </shape>
5.初始化(配置)下 ---获取侧边栏对象 ---设置成左侧...
slidingMenu = getSlidingMenu(); slidingMenu.setMode(SlidingMenu.LEFT); slidingMenu.setShadowWidthRes(R.dimen.shadow_width);//阴影宽度 slidingMenu.setShadowDrawable(R.drawable.shadow);//阴影Drawable slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//拉开后离边框距离 slidingMenu.setFadeDegree(0.35f); //颜色渐变比例 //slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); //拉动事件区域 --全屏 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //拉动事件区域 --全屏
相关文章推荐
- 三种方式实现Android页面底部导航栏
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android TabLayout、ViewPager实现顶部和底部Tab导航 点击滑动切换Tab页面
- Android UI-实现底部切换标签之方式二 ──Activity(底部采用radioGroup+rutton)添加5个子fragment
- 总结:三种方式实现单击页签切换页面效果
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android-底部菜单Tabs 三种实现方式(ViewPager,Fragment,ViewPage+Fragment)
- 三种方式实现自定义圆形页面加载中效果的进度条,包含一个好看的Android UI
- 多种方式实现Android页面布局的切换
- Android 页面Activity切换动画的实现方式
- Android ViewPager实现滑动切换页面+底部tab点击切换页面(类微信首页)
- Android各个activity之间(页面之间)的切换实现方式(推荐第一种方式)
- Android底部菜单栏三种实现方式
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- 【Android实现程序前后台切换效果】(一)android后台运行时弹出正在运行通知的三种方式对比
- 【Android进度条】三种方式实现自定义圆形进度条ProgressBar