2013-02-21 171 views
0

我有以下我的应用程序,以获取屏幕宽度和高度的代码:Android |获取屏幕高度,宽度和屏幕宽度,高度

screenHeight = (short) Activity.getWindow().getWindowManager().getDefaultDisplay().getHeight(); 
screenWidth = (short) Activity.getWindow().getWindowManager().getDefaultDisplay().getWidth(); 

而在AndroidManifest,我有:

<activity 
     android:name="com.test.MyActivity" 
     android:configChanges="keyboardHidden|orientation" 
     android:launchMode="singleTask" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
</activity> 

现在,对于屏幕分辨率为1280x700的设备,我期望screenWidth变量的值始终为1280,screenHeight为700.这与用户如何握住手机无关。

但仍然有时我得到screenWidth等于700和高度等于1280.为什么?我的清单文件不应该强制我的应用程序的方向始终保持风景吗?

+0

我不明白这是一个问题。宽度/高度是相对于屏幕方向的,是的。一旦你知道了,你只需要相应地使用信息。 – njzk2 2013-02-21 10:09:38

回答

0

android:screenOrientation="landscape"

这是导致此问题,如果你有解决您的问题,然后使它到肖像。

如果您不想限制自己,那么请检查代码中的方向并进一步使用您的代码。

不是代码而是想法, 例如,

if(getOrientation=="portrait") 

    determine height and width. 

else 
    ... 
0

这是Android的一个有点棘手的部分。由于在您的应用程序中可能会异步发生大量事情,因此您不应该依赖此类方法。如果您的应用程序被迫以横向模式运行,但您拥有一部普通手机,该手机可能具有肖像作为家庭和锁定屏幕的默认方向,则会遇到麻烦。每当您锁定屏幕或启动应用程序的新实例时,由于未完成旋转动画,您无法确定报告的宽度和高度是横向还是纵向。

要正确确定分辨率,您必须了解您实际检查的方向。您可以使用加速度计,OrientationEventListener,OnConfigurationChanged和rootView大小。不过,我想处理这个问题的最好方法是在代码中交换宽度和高度,因此宽度始终是较大的值。就这样。

0

放线在您的清单活动标签

android:configChanges="keyboardHidden|orientation" 

覆盖的方法在你的活动

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

,并把线onCreate()方法

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAP); 

您的应用程序将只留在风景区。 :)

相关问题