0

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

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 和 height 等于 1280。这是为什么呢?我的清单文件不应该强制我的应用程序的方向始终保持横向吗?

4

3 回答 3

0

put the line in your manifest activity tag

android:configChanges="keyboardHidden|orientation"

override the method in your activity

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

and put the line in onCreate() method

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAP);

your application will remain in landscap only. :)

于 2013-02-21T10:54:12.217 回答
0

这是Android的一个有点棘手的部分。您不应该依赖这些方法,因为您的应用程序中可能会异步发生许多事情。如果您的应用程序被迫以横向运行,但您有一部普通手机,它可能将纵向作为主屏幕和锁定屏幕的默认方向,那么您就有麻烦了。每次锁定屏幕或启动应用程序的新实例时,由于旋转动画挂起,您无法确定报告的宽度和高度是横向还是纵向。

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

于 2013-02-21T10:25:40.560 回答
0

android:screenOrientation="landscape"

这导致了这里的问题,如果你必须解决你的问题,那就让它成为肖像。

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

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

 if(getOrientation=="portrait")

   determine height and width.

 else
    ...
于 2013-02-21T10:13:00.480 回答