参考:http://blog.csdn.net/harvic880925/article/details/38090845
一、碎片概述:
Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,但是Activity也有它的局限性,同样的界面在手机上显示可能很好看,在平板上就未必了,因为平板的屏幕非常大,手机的界面放在平板上可能会有过分被拉长、控件间距过大等情况。这个时候更好的体验效果是在Activity中嵌入”小Activity”,然后每个”小Activity”又可以拥有自己的布局。因此,我们今天的主角Fragment登场了。它不需要在menifest中配置。
首先需要注意,Fragment是在3.0版本引入的,如果你使用的是3.0之前的系统,需要先导入android-support-v4的jar包才能使用Fragment功能。
二、碎片的使用方法:
1.简单方法:(看参考)
过程:
1>新建两个左右侧的布局
2>新建两个Fragment类,添加这两个布局(继承Fragment类,重写onCreatView()方法)
3>在main.xml中添加两个Fragment布局(name写成完整的类名)
2.动态添加碎片:(看参考)
例:
getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit();
分为5步:
1.获取到FragmentManager,在Activity中可以直接通过getFragmentManager得到。
2.开启一个事务,通过调用beginTransaction方法开启。
3.向容器内加入Fragment,一般使用replace方法实现,需要传入容器的id和Fragment的实例。
4.提交事务,调用commit方法提交。
3、在碎片中模拟返回栈
1)我们发现向活动中动态添加碎片后,通过点击按钮添加了一个碎片之后,按下Back键程序就会直接退出,这里模仿类似于返回栈的效果,按下Back键可以回到上一个碎片。
2)做法很简单:
FragmentTransaction提供了一个addToBackStack()方法,可以将一个事务添加到返回栈中,
方法:
FragmentTransaction transaction = getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1);
transaction.addToBackStack(null);
transaction.commit();
在提交前,调用了addToBackStack()方法,可以接收一个名字用于描述返回栈的状态,一般传入null即可。
4.碎片和活动 以及 碎片和碎片之间的通信:
1)碎片和活动之间的通信:
1>活动中调用碎片
FragmentManager提供的一个类似于findViewById()的方法,代码如下:
RightFragment fragment = (RightFragment )getFragmentManager().findFragmentById(R.id.right_fragment);
活动使用到fragment中组件
在fragment中创建一个update方法,在主活动中调用其方法即可。
2>碎片中调用活动;
MainActivity activity = (MainActivity)getActivity;
2)碎片之间的通信:
例如:
TextView textView = (TextView) getActivity().findViewById(R.id.fragment1_text);
三、碎片的生命周期:
- onAttach方法:Fragment和Activity建立关联的时候调用。
- onCreateView方法:为Fragment加载布局时调用。
- onActivityCreated方法:当Activity中的onCreate方法执行完后调用。
- onDestroyView方法:Fragment中的布局被移除时调用。
- onDetach方法:Fragment和Activity解除关联的时候调用。
详细:http://www.cnblogs.com/purediy/p/3276545.html
四、动态加载布局的技巧:
1.使用限定符:
1)概述:
设想如果程序能够根据设备的分辨率或屏幕大小的运行时来决定加载哪个布局,那我们可发挥的空间就更多了。
2)方法:
在res下,新建一个layout-large的文件夹,其中存放布局文件名称和layout中的一致,那么large就是一个限定符,屏幕被认为是large的设备会自动加载layout-large文件夹下的布局,而小屏幕的设备还是会加载layout文件夹下的布局。
3)限定符还有其他:
android中常见的限定符
大小:
small:提供给小屏幕设备的资源
normal:提供给中等屏幕设备的资源
large:提供给大屏幕设备的资源
xlarge:提供给超大屏幕设备的资源
分辨率:
ldpi:提供给低分辨率设备的资料(120dpi以下)
mdpi:提供给中等分辨率设备的资源(120dpi到160dpi)
hdpi:提供给高分辨率设备的资源(160dpi到240dpi)
xhdpi:提供给高分辨率设备的资源(240dpi到320dpi)
方向:
land:提供给横屏设备的资源
port:提供给竖屏设备的资源
3.最小宽度限定符
1>最小宽度限定符允许我们对屏幕的宽度指定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载这个布局,屏幕宽度小于这个值的设备就加载另一个布局。
2>例如:
3>注意:最小宽度限定符是在android3.2版本引入的,由于我使用的好似最低兼容系统版本4.0,所以可以放心地使用它。
五、补充:
1)兼容版本,可能需要改manifest中的支持的最小版本。
当fragment创建时,调用onCreatView()方法。返回当前fragment显示的view布局。
2)判断手机横竖屏:
3)建议使用v4包下的类,这样在低版本的android版本中都可以正常使用。