我的应用程序中有以下代码来获取屏幕宽度和高度:
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.为什么会这样?我的清单文件是否应该强制我的应用程序的方向始终保持格局?
答案 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);
您的申请将仅保留在景观中。 :)