如何检测android设备的方向?
是否可以很简单地检测android设备的当前方向,而不编程一个监听器和处理位置matrix? 在我的应用程序中,我只想知道当前的方向 – 垂直或水平。 但是我不想听取公理或其他事件的事件。
使用getRotation
方法:
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int rotation = display.getRotation();
从文档:
从“自然”方向返回屏幕的旋转。 返回的值可能是
Surface.ROTATION_0
(不旋转),Surface.ROTATION_90
,Surface.ROTATION_180
或Surface.ROTATION_270
。 例如,如果设备具有自然高大的屏幕,并且用户已经将其转向横向以进入横向方向,则这里返回的值可以是Surface.ROTATION_90
或Surface.ROTATION_270
这取决于其转向的方向。 angular度是屏幕上绘制的graphics的旋转,这是设备的物理旋转的相反方向。 例如,如果设备逆时针旋转90度,则补偿渲染将顺时针旋转90度,因此返回的值将为Surface.ROTATION_90
。
请记住, getRotation
是从Android 2.2引入的。 如果您的目标是较旧的设备,请使用getOrientation
。
你也可以使用:
getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
有一个关于这个主题是一个不错的文章是必读: 一个屏幕转向值得一个
你只需要知道你的canvas的高度和宽度……你的表面……你的显示器……等等
也许你可以得到它:
if (canvas.getHeight()>canvas.getWidth() ) { //portrait } else { //landscape }
我认为最安全和最简单的方法是在XML中为您的活动的某个元素添加标签。 例如,在纵向布局中将viewpager的标记设置为“纵向”,并将横向设置为“横向”。 然后在你的oncreate检查标签是这样的:
if(mViewpager.getTag().equals("portrait")) // is in portrait else // is in landscape
这可能不是相关的,但如果碰巧你需要知道这一点,因为你想locking设备的当前方向,你可以切换下面两行代码。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);