最新消息:

使用Fragment来适配大屏幕

android 大步 1016浏览 0评论
我们知道,Fragment有两个作用,一个是方便View的复用,另外一个是作为大屏幕(手机旋转)做适配。这里,我们就说下第二个使用方法。先看效果图:
手机为竖屏的时候:
手机旋转为横屏:

思路:

1.我们可以看到,竖屏和横屏两种布局不同,所以,我们需要准备两个布局文件。其中一个是竖屏的时候,就是一个Activity里面放着一个Fragment。而横屏的时候,Activity里面摆放两个Fragment,左右各一个。
 
那么问题来了,怎么识别什么时候是竖屏或横屏(大屏)呢?
 
解答:很简单,我们可以根据屏幕的宽度来判断。当宽度大于450dp的时候,我们就认为是横屏,就使用含有两个Fragment的布局。不过,判断也有很多种方式,我们可以自己写java代码,也可以直接利用android为我们提供的方式来进行判断。
 
我们创建一个ScreenUtility.java 来使用java代码开检测屏幕的宽度和高度(单位是dp):

 

检测的结果:
竖屏的时的宽度和高度:

横屏时的宽度和高度:
 
 
不过,android自身其实已经内置了自动检测屏幕宽度和高度的功能,我们没必要自己再去实现一遍。那么如何调用android系统自带的这一功能?
 
解答:大家经常看到有些demo中有layout-sw500dplayout-w500dp 和layout-h500dp以及layout-small等布局文件夹。 它们就是google为了给android适配而使用的。
layout-sw500dp:表示屏幕的最小边大于等于500dp的时候,则使用改目录下的布局。注意:屏幕有高height和宽width,sw500dp用数学表达式就是:     Min(height, width) >= 500dp 。
layout-w500dp:和sw500dp有区别。这里仅仅表示  width >= 500dp
layout-h500dp: 和w500dp相似,只不过把width换成了height ,即 height  >= 500dp
layout-small:是以屏幕的尺寸划分,small表示 屏幕的最小尺寸为 426dp x 320dp。
更多划分,详见google官方文档:http://developer.android.com/guide/practices/screens_support.html
上面的讲解如果理解了话,那么,我们就可以利用这一特性,将两个同名的内容不同的布局文件,分别放到layout 和layout-w450dp 中。
res/layout/文件夹中,我们放只包含一个Fragment的activaity布局文件activity_main.xml:

 

res/layout-w450dp/文件夹中,我们放包含两个Fragment的activity布局文件activity_main.xml(注意,必须是同样的名字。):

 

2.如何根据Fragment的个数来进行对应的操作?
解答:当我们在屏幕宽度大于450dp的设备上,则android系统会加载那个layout-w450dp/activity_main.xml  布局文件,则此时,我们使用findViewById(R.id.detailContainer) 得到的肯定不是null。这样,我们就可以以此来判断当前有几个Fragment,如果只有一个Fragment,点击ListView中的项目后,就跳转到另外一个Activity中。如果有两个Fragment,则就只需要动态切换第二个Fragment即可。
MainActivity代码如下:

 

====================================================
思路讲解完毕了,下面直接贴上整个demo的下载地址
https://github.com/ksharpdabu/twoFragment

其他一些问题:

A.其实我们可以把上面用到的两个activity_main.xml都放到res/layout/ 目录中,只不过需要绕个弯,使用别名的方式。
 
具体步骤如下:
1.先将含有两个的Fragment的activity_main.xml改名为activity_main_large.xml,内容不变,放到res/layout/目录。
2.在res/layout-w450dp/中创建一个叫layout.xml的文件,内容为(使用activity_main这一别名指向res/layout/activity_main_large.xml):

 

转载请注明:大步's Blog » 使用Fragment来适配大屏幕

SiteMap