这是一个检测屏幕旋转事件并决定保留或更改屏幕方向的伪代码。
public boolean onOrientationChanges(orientation) {
if(orientation == landscape)
if(settings.get("lock_orientation"))
return false; // Retain portrait mode
else
return true; // change to landscape mode
return true;
}
如何在 Android 中制作类似的东西?
编辑: 我实际上正在寻找在哪里处理方向变化的答案。我不想通过添加 screenOrientation="portrait"来修复方向。
我需要一些类似于 onConfigurationChanges() 的东西,我可以在其中处理方向,但不需要我手动重绘 View 。
最佳答案
您首先需要一个 Display
实例:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
那么方向可以这样调用:
int orientation = display.getOrientation();
按照自己的方式检查方向并使用它来改变方向:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
希望对你有帮助。
更新:
好的,假设你有一个 oAllow
var,它是 Boolean
,默认值为 False
。
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
switch(orientation) {
case Configuration.ORIENTATION_PORTRAIT:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
}
}
您可以添加更多选择。
我没有尝试这个示例,但至少告诉你一些关于如何解决的线索。如果您有任何错误,请告诉我。
更新
getOrientation()
已被弃用 see here .而是使用 getRotation()
。要检查设备是否处于横向模式,您可以执行以下操作:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
int orientation = display.getRotation();
if (orientation == Surface.ROTATION_90
|| orientation == Surface.ROTATION_270) {
// TODO: add logic for landscape mode here
}
关于Android 在运行时确定屏幕方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508597/