4.0上设备屏幕旋转依赖设备的探索

开发一个App,如果在手机上运行,我希望它能够竖屏显示,如果在一个平板上运行,我希望它可以横竖切换。那么如果判断设备是一个平板还是一个手机呢?可以根据获取设备的最短边(http://blog.csdn.net/yangyanfengjiayou/article/details/19082715)来判断是否是平板或者是手机。一般而言,平板的最短边会大于600dp.所以我们可以在values-sw600dp,value-sw720dp,values中添加bool.xml属性,其中values里面的值是false;

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<bool name="isOrientationChanged">true</bool>
</resources>


这样通过获取isOrientationChanged的值来判断是否是平板或者手机.true代表的是平板,false代表的是手机。ok,这里完成了第一步。接下来完成第二步,如何使手机运行这个app只保持竖屏?如何让平板运行这个app可以进行横竖屏切换。在你的onCreate里面添加如下代码,代码如下:

// 配置文件决定该应用是否可以屏幕切换
boolean isOrientationChange = getResources().getBoolean(R.bool.isOrientationChanged);

//设置里面是否禁止横竖屏,若禁止了,设备也不能进行横竖屏切换了。

boolean isRotate = (Settings.System.getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION,0) != 0) ? true : false;
if (isRotate) {
if (isOrientationChange) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

总之,上面的第一步适用于android 3.0以及以上的设备,因为在android3.0以及以上的时候才引入了sw这个属性。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...