目标是将屏幕布局固定为“横向”或“纵向”并继续接收旋转事件。我知道Activity 中的onConfigurationChanged (Configuration newConfig),但它不适用于固定布局。如何处理?为了更清楚地解释,我想实现类似 Android Camera 应用程序的行为 - 仅旋转按钮图像但不重新加载活动并且不更改布局。
EDIT#1:我的意思是这个方法在调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)后不起作用
编辑#2:是的,onConfigurationChanged不是我需要的。相反,应该实现SensorEventListener接口并检查onSensorChanged事件。
完整的解决方案,取自获取手机方向但将屏幕方向固定为纵向:
public class MainActivity extends Activity implements SensorEventListener {
int orientation = -1;
@Override
public void onSensorChanged(SensorEvent event) {
if (event.values[1] < 6.5 && event.values[1] > -6.5) {
if (orientation != 1) {
Toast toast = Toast.makeText(getApplicationContext(), "LANDSCAPE", Toast.LENGTH_SHORT);
toast.show();
}
orientation = 1;
} else {
if (orientation != 0) {
Toast toast = Toast.makeText(getApplicationContext(), "PORTRAIT", Toast.LENGTH_SHORT);
toast.show();
}
orientation = 0;
}
}
这非常适合您的活动的此 AndroidManifest 设置:
android:screenOrientation="landscape"