【发布时间】:2015-03-03 12:21:37
【问题描述】:
下面是我的活动,我需要以不同方式处理方向变化,基本上每当 onConfigurationChanged() 事件因设备方向变化而触发时,我都会显示一个对话框窗口并询问用户他是否要根据用户操作更新方向我更新为横向/纵向或保持相同的方向。
public class MyActivity extends Activity {
..
..
private boolean mFlagConfigChangeManual = false;
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.e("onConfigurationChanged", "mFlagConfigChangeManual="+mFlagConfigChangeManual);
super.onConfigurationChanged(newConfig);
int orient = -1;
if (!mFlagConfigChangeManual) {
if (newConfig.orientation == newConfig.ORIENTATION_LANDSCAPE) {
mFlagConfigChangeManual = true;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
orient = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else if (newConfig.orientation == newConfig.ORIENTATION_PORTRAIT) {
mFlagConfigChangeManual = true;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
orient = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
} else {
mFlagConfigChangeManual = false;
return;
}
final int orient2 = orient;
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
if (orient2 >= 0) {
mFlagConfigChangeManual = true;
setRequestedOrientation(orient2);
}
break;
case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Would you like to update orientation?")
.setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}
我已经在清单文件中进行了必要的更改,但我遇到了两个问题,第一次显示方向确认对话框它可以工作,但是当我再次重新定向时,它什么也没做,基本上 onConfigurationChanged() 不会再次调用.我注意到的另一个问题是;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);方法在横向模式下将视图倒置。这可以做得更好吗?
【问题讨论】:
标签: android