怎样判断当前手机是横屏还是竖屏(参与者都酌情给分的,只希望问题早点解决)

gujinf2008 2011-08-04 05:55:11
今天在网上看了一个重力传感器的代码,说什么横屏和竖屏的时候,方向是不一样的,有点晕,例子代码是写的竖屏的,就是根据手机的翻转,小球会动,竖屏的时候正常,我横屏的时候运行的时候老是感觉怪怪的。就想自己写个横屏的例子研究研究,但是我怎样知道我当前的手机是横屏放着还是竖屏放着呢?
去网上搜了一下啊,有个这样的方法:

int t = this.getRequestedOrientation();
if(t == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE ){
Log.i(MySensor.TAG, "当前手机处于横屏");
} else if(t ==
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
Log.i(MySensor.TAG, "当前手机处于竖屏");
}

但是我单步调试了一下,获得的t值是-1,不管我手机是横屏放着启动程序,还是竖屏放着启动程序,得到的值都是-1,怎么回事啊?
...全文
682 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
念茜 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gujinf2008 的回复:]

刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,
Java code

Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
……
[/Quote]

好 谢谢
六百万 2011-08-05
  • 打赏
  • 举报
回复
学习了,以前没怎么关注判断横竖屏问题
[Quote=引用 2 楼 gujinf2008 的回复:]
刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,

Java code


Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation(……
[/Quote]
新晋技术宅 2011-08-05
  • 打赏
  • 举报
回复
学习了~
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fontlose 的回复:]
public int getRequestedOrientation ()
Since: API Level 1 Return the current requested orientation of the activity. This will either be the orientation requested in its component's manifest, or the la……
[/Quote]

这个应该就是了!
完美灬缺陷 2011-08-05
  • 打赏
  • 举报
回复
学习、
fontlose 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 gujinf2008 的回复:]
啊,崩溃了,我刚用这个方法获得值是正确的啊,是这个样子的,我从屏幕状态变化的时候,activity的oncreate方法是重新调用的,是我没说清楚吧。

引用 14 楼 fontlose 的回复:
引用 2 楼 gujinf2008 的回复:
刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,

Java code

Display display = ((W……
[/Quote]

这只是常熟定义的一样造成的 转到其他方向就检测不出来了


gujinf2008 2011-08-05
  • 打赏
  • 举报
回复
啊,崩溃了,我刚用这个方法获得值是正确的啊,是这个样子的,我从屏幕状态变化的时候,activity的oncreate方法是重新调用的,是我没说清楚吧。
[Quote=引用 14 楼 fontlose 的回复:]
引用 2 楼 gujinf2008 的回复:
刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,

Java code

Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.g……
[/Quote]
gujinf2008 2011-08-05
  • 打赏
  • 举报
回复

是我搞错了,呵呵,这个样子也是可以的,谢谢
[Quote=引用 3 楼 fontlose 的回复:]
是用错方法了 还可以

Java code


int t = myActivity.this.getResources().getConfiguration().orientation ;
;
if(t == Configuration.ORIENTATION_L……
[/Quote]
网络咖啡 2011-08-05
  • 打赏
  • 举报
回复
在Activity中覆盖
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
if(width > height){ //横屏

}else{

}
}
fontlose 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gujinf2008 的回复:]
刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,

Java code

Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();……
[/Quote]
大哥 这方法也用错了 看下Display类的手册 这样用才对 查看屏的旋转角度的

Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
t = display.getOrientation();
if(t == Surface.ROTATION_0 ){
Log.i("TAG", "ROTATION_0");
} else if(t ==Surface.ROTATION_90 ){
Log.i("TAG", "ROTATION_90");
}else if(t ==Surface.ROTATION_180 ){
Log.i("TAG", "ROTATION_180");
}else if(t ==Surface.ROTATION_270 ){
Log.i("TAG", "ROTATION_270");
}









gujinf2008 2011-08-05
  • 打赏
  • 举报
回复
刚试了一下,不行啊,正好比正常的值大1啊。
[Quote=引用 3 楼 fontlose 的回复:]
是用错方法了 还可以

Java code


int t = myActivity.this.getResources().getConfiguration().orientation ;
;
if(t == Configuration.ORIENTATION_L……
[/Quote]
ch_984326013 2011-08-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/ch_984326013/article/details/6647745
fontlose 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hawkofwinter 的回复:]
横屏和竖屏,模拟器上可以吗?
[/Quote]
ctrl+F12
中才德创 2011-08-04
  • 打赏
  • 举报
回复
横屏和竖屏,模拟器上可以吗?
fontlose 2011-08-04
  • 打赏
  • 举报
回复
public int getRequestedOrientation ()
Since: API Level 1 Return the current requested orientation of the activity. This will either be the orientation requested in its component's manifest, or the last requested orientation given to setRequestedOrientation(int).
Returns
Returns an orientation constant as used in ActivityInfo.screenOrientation.

public static final int SCREEN_ORIENTATION_UNSPECIFIED
Since: API Level 1 Constant corresponding to unspecified in the screenOrientation attribute.
Constant Value: -1 (0xffffffff)

看手册,getRequestedOrientation返回的是manifest内定义的screenOrientation属性或最近一次setRequestedOrientation设置的orientation。 你没定义manifest和setRequestedOrientation设置返回的是SCREEN_ORIENTATION_UNSPECIFIED也就是-1

fontlose 2011-08-04
  • 打赏
  • 举报
回复
是用错方法了 还可以

int t = myActivity.this.getResources().getConfiguration().orientation ;
;
if(t == Configuration.ORIENTATION_LANDSCAPE){
Log.i("33333", "当前手机处于横屏");
} else if(t ==Configuration.ORIENTATION_PORTRAIT){
Log.i("33333", "当前手机处于竖屏");
}

gujinf2008 2011-08-04
  • 打赏
  • 举报
回复
刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,

Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
if(orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE ){
Log.i(MySensor.TAG, "当前手机处于横屏");
} else if(orientation ==ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
Log.i(MySensor.TAG, "当前手机处于竖屏");
}

问题虽然解决了,但是为什么第一种方法没有获得正确的值呢,请各位继续发表意见,谢谢
  • 打赏
  • 举报
回复
各位大牛们,都来看看!
仅限学习研究之用,切勿用作商业用途,请在下载后24小时之内删除,本人不承担任何责任。 鸿运年会抽奖软件是功能强大的年会抽奖软件,界面大气漂亮,可设置不同的抽奖形式,自定义抽奖人数和奖项数,滚动显示抽奖人的照片和名字,极简单的设置方式。在年会和各种晚会用最合适了。 鸿运年会抽奖软件历经上千家公司和个人实践检验,好评百百!还可以根据您的需求定制开发(按复杂度酌情加收费用)。 鸿运年会抽奖软件功能特点简介: *公正、公平、不重复中奖 *界面美观大方,鲜明的中国传统色彩(可选喜庆类、人文类、科技类等诸多界面) *运行稳定 功能强大 简洁易用 美观流畅 *支持显示序号;号码滚动显示 *支持自定义背景音乐;可自定义各奖项获奖人数;可自定义重复抽奖规则; *支持双显示器(例如笔记本电脑连接投影仪) *支持外部数据加入(加入大量附加数据稳定版) *支持一次抽出全部中奖者或者多次抽出中奖者 *支持显示抽奖活动所有抽出的中奖者 *支持中奖名单保存.支持一键抽奖; *支持“抽奖参数”保存,下次打开时“直接使用” *支持:“文字字符窜抽奖” *支持非号码数字抽奖,即支持姓名等中文字符抽奖 *可根据客户的需要定制开发,软件界面及其他均可定制开发 鸿运年会抽奖软件适用于各单位年终抽奖、晚会抽奖、姓名抽奖、编号抽奖、手机号码抽奖、身份证号码抽奖、企事业单位抽奖、电视台抽奖、屏幕抽奖、LED抽奖
零资源下载,享精神至上~ 4.0版新加入雪花飞扬天气模拟粒子系统,效果非常华丽。 提醒大家一下,可在SnowParticleClass.h中的PARTICLE_NUMBER宏中改变雪花粒子数量,默认粒子数量为10000,我1G显存的显卡取10万粒子数量帧数就只有8帧了。所以要自己改粒子数量的话请根据自己的显卡性能酌情选择,如果你取个非常大的50万粒子数量,显卡吃不消烧了可别怪我- - 其中的3D人物模型来自英雄无敌6。 背景音乐为魔兽暗夜精灵战斗曲主题曲。 一个综合型的Direct3D示例程序的4.0版。 用键盘上W,A,S,D,I,J,K,L,↑,↓,←,→12个键加上鼠标在美丽的三维空间中翱翔。包括了Direct3D初始化,DirectInput输入处理,顶点缓存,光照与材质,文字输出,颜色,纹理贴图,四大变换,网格模型,X文件载入等等知识(当然还有默认被开启的深度缓存),以及地形系统模拟,三维天空模拟,粒子系统。 源码的配套博文是 《【Visual C++】游戏开发五十 浅墨DirectX教程十八 雪花飞扬:实现唯美的粒子系统》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8744805, 点击Release文件夹下的exe文件可以直接看到运行效果,运行需要DirectX运行库的支持。报缺少D3D的DLL系列错误的童鞋们请google/百度一下 “DirectX 9.0c runtime”,下载并装个最新版的。 报缺少MVCR100D.Dll错误的朋友们去下一个安装就可以了,或者直接点击sln打开工程再次编译一次。 如果是想调试并运行源代码,但是报错了,请去下载最新版DirectX SDK并进行DirectX开发环境的配置。 编写环境:VS2010 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 希望能和大家一起交流,共同学习,共同进步。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧