我想开发一个视频播放器应用,当设备是风景时,视频是全屏播放,当设备是肖像时视频是半屏播放。在景观中,有一个按钮,当用户点击它时,应用程序将强制为纵向(此时,设备仍然是水平的。我想要的是什么:当用户将设备更改为垂直时,并更改设备再次水平,应用程序可以自动从纵向更改为横向。
我打电话给setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
逼迫肖像。致电setRequestedOrientation()
后,当我将设备从水平更改为垂直时,onConfigurationChanged()
将不会再次呼叫。因此,没有时间点致电setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)
。
我尝试OrientationEventListener
,但在onOrientationChanged()
中会有很多值会返回。但我想要的只是设备方向(风景或肖像)。
还有其他方法可以做我想要的吗?
答案 0 :(得分:4)
你必须使用OrientationEventListener,我这样使用,然后像往常一样使用onConfigurationChanged:
OrientationEventListener orientationEventListener = new OrientationEventListener(getApplicationContext()) {
@Override
public void onOrientationChanged(int orientation) {
boolean isPortrait = isPortrait(orientation);
if (!isPortrait && savedOrientation == ORIENTATTION_PORTRAIT) {
savedOrientation = ORIENTATION_LANDSACAPE;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
} else if (isPortrait && savedOrientation == ORIENTATION_LANDSACAPE) {
savedOrientation = ORIENTATTION_PORTRAIT;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
};
orientationEventListener.enable();
private boolean isPortrait(int orientation) {
if (orientation < 45 || orientation > 315) {
return true;
}
return false;
}
您在此处有更多信息:https://developer.android.com/reference/android/view/OrientationEventListener.html
答案 1 :(得分:-2)
您可以覆盖onConfigurationChanged(Configuration config);
:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// Landscape
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
// Portrait
}
}