设置请求的方向后屏幕高度不正确



我试图强制我的布局在平板电脑上横向,所以我有以下代码:

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但是,如果我在此调用后立即调用getResources((.getDisplayMetrics((.widthPixel,它将返回平板电脑的高度而不是宽度。只有在调用onConfigurationChanged之后,我才开始获得正确的高度,这发生在我的主要布局使用不正确的屏幕尺寸膨胀之后。

我尝试在setRequestOrientation之后这样做:

DisplayMetrics dm = getResources().getDisplayMetrics();
int height = dm.heightPixels;
int width = dm.widthPixels;
dm.heightPixels = width;
dm.widthPixels = height;
getResources().updateConfiguration(getResources().getConfiguration(), dm);

不过这并没有帮助。

处理这种情况的正确方法是什么?

附言即使我将方向设置为SCREEN_ORIENTATION_LANDSCAPE,在发生变化后,我也会不断SCREEN_ORIENTATION_USER。为什么?

问题是您的代码在设置布局之前计算宽度和高度。有一个名为ViewTreeObserver的东西,它只允许你在设置布局后进行计算。

示例代码

final LinearLayout layout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID);
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener (new OnGlobalLayoutListener() { 
@Override 
public void onGlobalLayout() {
layout.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
int width  = layout.getMeasuredWidth();
int height = layout.getMeasuredHeight(); 
} 
});

您是否在清单的活动标签中添加了android:configChanges="keyboardHidden|orientation|screenSize"?如果没有,请添加并重试

最新更新