首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android手机上检查方向

在Android手机上检查方向
EN

Stack Overflow用户
提问于 2010-05-09 06:10:24
回答 23查看 292.9K关注 0票数 452

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

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 2010-05-10 04:06:07

用于确定要检索哪些资源的当前配置可从资源的Configuration对象中获得:

代码语言:javascript
复制
getResources().getConfiguration().orientation;

您可以通过查看其值来检查方向:

代码语言:javascript
复制
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
    // In landscape
} else {
    // In portrait
}

更多信息可以在Android Developer中找到。

票数 729
EN

Stack Overflow用户

发布于 2011-06-04 18:11:06

如果你在某些设备上使用getResources().getConfiguration().orientation,你会弄错的。我们最初在http://apphance.com中使用了这种方法。多亏了Apphance的远程日志记录,我们可以在不同的设备上看到它,我们看到碎片在这里发挥了作用。我见过一些奇怪的例子:比如肖像和正方形的交替(?!)在HTC Desire HD上:

代码语言:javascript
复制
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

或者根本不改变方向:

代码语言:javascript
复制
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()总是正确的(它是由窗口管理器使用的,所以最好是这样)。我想说最好的办法是总是做宽/高的检查。如果你想一下,这正是你想要的--知道宽度是小于高度(纵向),相反(横向)还是相同(正方形)。

然后它归结为这个简单的代码:

代码语言:javascript
复制
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;
}
票数 172
EN

Stack Overflow用户

发布于 2013-02-18 12:00:21

解决这个问题的另一种方法是不依赖于显示的正确返回值,而是依赖于Android资源解析。

res/values-landres/values-port文件夹中创建包含以下内容的文件layouts.xml

res/values-land/layouts.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_landscape">true</bool>
</resources>

res/values-port/layouts.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_landscape">false</bool>
</resources>

在您的源代码中,您现在可以访问当前方向,如下所示:

代码语言:javascript
复制
context.getResources().getBoolean(R.bool.is_landscape)
票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2795833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档