gpt4 book ai didi

android - 传感器肖像 : How to catch orientation changing?

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:51 24 4
gpt4 key购买 nike

我正在开发一个仅支持纵向和反向纵向两种方向的应用程序,因此我在我的 list 中写了“sensorPortrait”,它运行良好。

问题是,我想为这两个方向使用不同的布局。

启用 sensorPortrait 会禁用“onConfigurationChange”调用。

我使用:

orientationEventListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int i) {
int newOrientation = getScreenOrientation();
if (newOrientation != orientation) {
orientation = newOrientation;
if (newOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
...
setContentView(R.layout.main);

} else if (newOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) {
...
setContentView(R.layout.main_reverse_portrait);
}
}
}
};
orientationEventListener.enable();

问题是这段代码是在改变方向后被调用的,所以当用户旋转手机时,他们首先看到的是之前的布局,由 Android 自动旋转,然后是正确的布局。看起来 Not Acceptable ,您知道如何解决吗?

最佳答案

我建议您使用 configChanges 并覆盖 onConfigurationChanged(Configuration newConfig) 方法。如果不是您支持的方向,请忽略该方向。

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
...
setContentView(R.layout.main);
} else if (newOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) {
...
setContentView(R.layout.main_reverse_portrait);
}
}

这个答案可能会进一步帮助您。

Android: Detect Orientation Changed

更新:

有一个方法getChangingConfigurations()您可以在 onStop() 中使用它来确定是什么配置更改导致 Activity 被销毁。在这种情况下,您不需要使用 onConfigurationChanged() 回调。

更新 2:

使用 sensorPortrait 并在 onCreate 中手动检查旋转角度。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
Display display = ((WindowManager)
context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
if (rotation == Surface.ROTATION_180) { // reverse portrait
setContentView(R.layout.main_reverse_portrait);
} else { // for all other orientations
setContentView(R.layout.main);
}
...
}

关于android - 传感器肖像 : How to catch orientation changing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com