如何检测Android屏幕方向已更改

时间:2011-06-18 10:55:19

标签: android

在Android调用onDestroy方法之前,是否有人知道如何检测屏幕方向?在调用onDestroy方法时,活动中存在需要取消的异步任务。当屏幕方向改变时,我不希望取消异步任务。

5 个答案:

答案 0 :(得分:1)

我不认为这是可能的。但我可能错了。无论如何,请查看android:configChangesonConfigurationChanged API。这可能会有所帮助。

另外,为什么不取消onDestroy方法中的异步任务?

我可以看到在onStop期间调用了一个API。见isChangingConfigurations。它要求您使用API​​版本11,即Android 3.0

答案 1 :(得分:1)

试试这个:

int width, height;

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

height = displaymetrics.heightPixels;
width = displaymetrics.widthPixels;

答案 2 :(得分:1)

您需要添加到清单android:ConfigChanges。这不会重新创建您的活动,但您需要通过覆盖onConfigurationChanged()方法手动应用新方向的所有资源(如果它们已更改)。在那里,您还将获得有关当前方向和一些可在配置期间更改的其他参数的信息。

答案 3 :(得分:1)

试试这个

public int getscrOrientation()
{
Display getOrient = getWindowManager().getDefaultDisplay();

int orientation = getOrient.getOrientation();

// Sometimes you may get undefined orientation Value is 0
// simple logic solves the problem compare the screen
// X,Y Co-ordinates and determine the Orientation in such cases
if(orientation==Configuration.ORIENTATION_UNDEFINED){

Configuration config = getResources().getConfiguration();
orientation = config.orientation;

if(orientation==Configuration.ORIENTATION_UNDEFINED){
//if height and widht of screen are equal then
// it is square orientation
if(getOrient.getWidth()==getOrient.getHeight()){
orientation = Configuration.ORIENTATION_SQUARE;
}else{ //if widht is less than height than it is portrait
if(getOrient.getWidth() < getOrient.getHeight()){
orientation = Configuration.ORIENTATION_PORTRAIT;
}else{ // if it is not any of the above it will defineitly be landscape
orientation = Configuration.ORIENTATION_LANDSCAPE;
}
}
}
}
return orientation; // return value 1 is portrait and 2 is Landscape Mode
}

答案 4 :(得分:0)

我设法找出了解决方案,但不确定它是否正确。当屏幕方向发生变化时,Android会在onRetainNonConfigurationInstance()方法之前调用onDestroy方法。我们可以定义一个布尔变量,作为屏幕方向改变的标志。调用onRetainNonConfigurationInstance()方法时,此变量将设置为true。