CheckBox 的代码如下:
CheckBox cb = (CheckBox)findViewById(R.id.freezer);
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}
}
});
因此,当我检查它时,屏幕会旋转到默认系统方向(我的平板电脑为横向)。
我需要卡住当前方向。如果您将设备转为纵向并切换 CheckBox,则必须忽略设备旋转,直到取消选中 CheckBox。
Display.getRotation() 不是解决方案,因为每个设备都有自己的 Surface.ROTATION
最佳答案
所以,这是我的解决方案。
private int getCurentOrientation() {
Display d = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
boolean isWide = d.getWidth() >= d.getHeight();
switch (d.getRotation()) {
case Surface.ROTATION_0:
return isWide ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
case Surface.ROTATION_90:
return isWide ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
case Surface.ROTATION_180:
return isWide ? ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
case Surface.ROTATION_270:
return isWide ? ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
: ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
return -1;
}
private void lockOrientation(boolean lock) {
if (lock) {
setRequestedOrientation(getCurentOrientation());
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}
}
在 4 台设备(2 台智能手机和 2 台平板电脑)上它可以正常工作。
关于android - 卡住屏幕方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10309588/