我试图在应用程序启动对话框时以任何方向锁定我的屏幕,然后在对话框解除时将其解锁 . 这是我的锁定和解锁代码:
// Sets screen rotation as fixed to current rotation setting
private void mLockScreenRotation() {
Log.d("####################", "screen orientation is " + mContext.getResources().getConfiguration().orientation);
// Stop the screen orientation changing during an event
if (mContext.getResources().getConfiguration().orientation == 1)
((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else ((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// switch (mContext.getResources().getConfiguration().orientation)
// {
// case Configuration.ORIENTATION_PORTRAIT:
// ((Activity) mContext).setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// break;
// case Configuration.ORIENTATION_LANDSCAPE:
// ((Activity) mContext).setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// break;
// }
}
// allow screen rotations again
private void mUnLockScreenRotation() {
this.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
mIsScreenRotationLocked = false;
}
当我启动任何对话框时,我调用mLockScreenRotation(),并在我的处理程序和DialogInterface.OnClickListener中调用mUnlockScreenRotation() .
有时我的屏幕仍然锁定,但不一致 . 任何建议或想法为什么或如何处理这个?
在此先感谢您的帮助!
修改:我锁定屏幕的代码:
public void displayProgressDialog(){
mLockScreenRotation();
// Get local handle on class progress dialog for optimization purposes
ProgressDialog temp = mProgressDialog = new ProgressDialog(this);
// Get message string (for some reason this dialog can't handle res IDs for messages)
String message = getString(R.string.downloading);
// Set some paramaters
temp.setIndeterminate(true);
temp.setTitle(R.string.weather_data);
temp.setMessage(message);
temp.setCancelable(false);
temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.MEMORY_TYPE_PUSH_BUFFERS /*WindowManager.LayoutParams.FLAG_BLUR_BEHIND*/);
temp.show();
}
public void displayLocationSearchDialog(){
mLockScreenRotation();
// Get local handle on class progress dialog for optimization purposes
ProgressDialog temp = mCoordinateSearchDialog = new ProgressDialog(this);
// Get message string (for some reason this dialog can't handle res IDs for messages)
String message = getString(R.string.searching);
// Set some paramaters
temp.setIndeterminate(true);
temp.setTitle(R.string.location_search);
temp.setMessage(message);
temp.setCancelable(false);
temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
temp.show();
}
public void showDatafeedFailedDialog(){
mLockScreenRotation();
new AlertDialog.Builder(this)
.setTitle(R.string.network_error)
.setMessage(R.string.weather_data_failed)
.setPositiveButton(R.string.try_again, mTryAgainListener)
.setNegativeButton(R.string.dismiss, null)
.create()
.show();
}
public void showCoordinateSearchFailedDialog(){
mLockScreenRotation();
new AlertDialog.Builder(this)
.setTitle(R.string.network_error)
.setMessage(R.string.location_search_failed)
.setPositiveButton(R.string.try_again, mCoordTryAgainListener)
.setNegativeButton(R.string.dismiss, null)
.create()
.show();
}
private void showGpsAlertDialog(){
mLockScreenRotation();
new AlertDialog.Builder(this)
.setTitle(R.string.gps_error)
.setMessage(R.string.gps_error_details)
.setNeutralButton(R.string.dismiss, null)
.setPositiveButton(R.string.go_to_settings, mToSettingsListener)
.create()
.show();
}
private void showGpsSearchingDialog(){
mLockScreenRotation();
ProgressDialog temp = mGpsSearchAlertDialog = new ProgressDialog(this);
String message = getString(R.string.location_services_details);
String btnText = getString(R.string.cancel);
temp.setIndeterminate(true);
temp.setTitle(R.string.location_services);
temp.setMessage(message);
temp.setButton(btnText, mCancelGpsSearchListener);
temp.setCancelable(true);
temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
temp.show();
}
private void showGpsTimeoutAlertDialog(){
mLockScreenRotation();
new AlertDialog.Builder(this)
.setTitle(R.string.gps_error)
.setMessage(R.string.gps_timeout_message)
.setPositiveButton(R.string.try_again, mGpsTimeoutListener)
.setNegativeButton(R.string.dismiss, mGpsTimeoutListener) // check this line with free if still no good
.create()
.show();
}
private void showWeatherAlertDialog(){
Log.d("############", "weather alert dialog");
mLockScreenRotation();
String message = null;
if(mWD.getWarningTypes() == null) return;
int cnt = 0;
int size = mWD.getWarningTypes().size() - 1;
for(String warningType : mWD.getWarningTypes()){
if(cnt == 0) message = warningType;
else if(cnt == size) message += " and " + warningType;
else message += ", " + warningType;
cnt++;
}
new AlertDialog.Builder(this)
.setTitle(R.string.watches_and_warnings)
.setMessage(message)
.setPositiveButton(R.string.go_to_accuweather, mToAlertWebListener)
.setNeutralButton(R.string.dismiss, null)
.create()
.show();
}
private void showNeedLocationAlertDialog() {
mLockScreenRotation();
new AlertDialog.Builder(this).setTitle(R.string.error).setMessage(
R.string.add_location).setNeutralButton(R.string.dismiss, null)
.setPositiveButton(R.string.okay, mToLocationSearchListener)
.create().show();
}
private void showConnectivityAlertDialog() {
mLockScreenRotation();
new AlertDialog.Builder(this).setTitle(R.string.network_error)
.setMessage(R.string.no_connection).setNeutralButton(
R.string.dismiss, null).create().show();
}
private void showCurrentUrlInBrowser(){
// Show current conditions web page
if(mWD.getURL() == null || mWD.getURL().length()
2 回答
这是一个糟糕的解决方案,但它确实有效 . 在LG GT540(Android 2.3.7)和华硕Transformer(Android 3.2)上测试过:
而不是在对话框中调用改变方向(然后可能在之后立即解除所述对话),尝试实现对话框的onDismiss监听器,如here所述 .