【发布时间】:2015-06-09 19:01:18
【问题描述】:
目标是将屏幕布局固定为“横向”或“纵向”并继续接收旋转事件。 我知道 Activity 中的 onConfigurationChanged(Configuration newConfig) 但它不适用于固定布局。如何处理? 为了更清楚地解释,我想在 Android Camera 应用程序中实现类似的行为 - 仅旋转按钮图像但不重新加载活动并且不更改布局。
编辑#1: 我的意思是这个方法在调用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
后不起作用编辑#2:
是的,onConfigurationChanged 不是我需要的。相反,应该实现 SensorEventListener 接口并检查 onSensorChanged 事件。
完整解决方案,取自Get phone orientation but fix screen orientation to portrait:
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"
【问题讨论】:
-
“固定布局”是什么意思?通常在轮换更改时,您的活动会被破坏并重新创建。 activiy-s onCreate 应该处理“横向”或“纵向”。为什么需要处理 onConfigurationChanged ?
-
我的意思是调用 setRequestedOrientation() 来修复横向或纵向布局。可能是我对这个 onConfigurationChanged 事件有误,应该选择另一种方法,但不知道怎么做?
标签: android layout onconfigurationchanged