Android |获取屏幕高度作为宽度,屏幕宽度作为高度

时间:2013-02-21 10:05:50

标签: android mobile android-manifest screen-orientation

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

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.这与用户握手的方式无关。

但是,有时候我的屏幕宽度等于700,高度等于1280.为什么会这样?我的清单文件是否应该强制我的应用程序的方向始终保持格局?

3 个答案:

答案 0 :(得分:0)

android:screenOrientation="landscape"

这会导致此处出现问题,如果您必须解决问题,请将其设为肖像。

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

不是代码而是一个想法, 的 e.g。

 if(getOrientation=="portrait")

   determine height and width.

 else
    ...

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

将该行放在您的清单活动代码

android:configChanges="keyboardHidden|orientation"

覆盖活动中的方法

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

并将该行放在onCreate()方法

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAP);

您的申请将仅保留在景观中。 :)