在Android手机上检查方向。

8 浏览
0 Comments

在Android手机上检查方向。

如何检查Android手机是横屏还是竖屏?

0
0 Comments

问题的出现原因:

问题是由于Android手机在检测屏幕方向时返回值不正确导致的。

解决方法:

可以通过依赖Android资源解决该问题。在res/values-landres/values-port文件夹中创建layouts.xml文件,并分别添加以下内容:

res/values-land/layouts.xml:

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

res/values-port/layouts.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_landscape">false</bool>
</resources>

在源代码中,可以通过以下方式访问当前屏幕方向:

context.getResources().getBoolean(R.bool.is_landscape)

这种方法使用了系统已经确定方向的方式,非常方便。

在默认的values文件中,该值将是什么?

0
0 Comments

在某些设备上,如果使用getResources().getConfiguration().orientation来获取屏幕方向,可能会得到错误的结果。我们在http://apphance.com中最初使用了这种方法。通过Apphance的远程日志记录,我们可以在不同设备上看到这个问题,并且我们发现这里的碎片化起了作用。

我看到了一些奇怪的情况:例如在HTC Desire HD上交替出现纵向和正方形(?!):

CONDITION[17:37:10.345] screen: rotation: 270 orientation: square

CONDITION[17:37:12.774] screen: rotation: 0 orientation: portrait

CONDITION[17:37:15.898] screen: rotation: 90

CONDITION[17:37:21.451] screen: rotation: 0

CONDITION[17:38:42.120] screen: rotation: 270 orientation: square

或者根本不改变方向:

CONDITION[11:34:41.134] screen: rotation: 0

CONDITION[11:35:04.533] screen: rotation: 90

CONDITION[11:35:06.312] screen: rotation: 0

CONDITION[11:35:07.938] screen: rotation: 90

CONDITION[11:35:09.336] screen: rotation: 0

另一方面,width()和height()总是正确的(它们被窗口管理器使用,所以最好是正确的)。我认为最好的方法是始终进行宽度/高度检查。如果你想一下,这正是你想要的 - 知道宽度是否小于高度(纵向),相反(横向)或宽度和高度是否相同(正方形)。

然后,就可以使用这段简单的代码:

public int getScreenOrientation()

{

Display getOrient = getWindowManager().getDefaultDisplay();

int orientation = Configuration.ORIENTATION_UNDEFINED;

if(getOrient.getWidth()==getOrient.getHeight()){

orientation = Configuration.ORIENTATION_SQUARE;

} else{

if(getOrient.getWidth() < getOrient.getHeight()){

orientation = Configuration.ORIENTATION_PORTRAIT;

}else {

orientation = Configuration.ORIENTATION_LANDSCAPE;

}

}

return orientation;

}

谢谢!初始化"orientation"是多余的。getWidth和getHeight没有被弃用,是的,它们是被弃用的。请使用getSize(Point outSize)。我正在使用API 23。

-potiuk它已经被弃用了。

0
0 Comments

在Android手机上检查方向的问题可能出现的原因是屏幕方向被锁定,无法自动旋转。解决方法是通过读取传感器来获取方向信息,然后根据需要进行解释。

要检查屏幕方向,可以使用以下代码:

int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
    // 在横屏模式下
} else {
    // 在竖屏模式下
}

但是,如果屏幕方向被锁定,上述方法将无法正常工作。在这种情况下,可以使用加速度计或重力传感器来正确获取方向信息。

另外,如果手机屏幕被分成两个屏幕,上述方法将返回true,但可能无法正确判断方向。

更多信息可以在Android开发者网站上找到。

0