我试图强制我的布局在平板电脑上横向,所以我有以下代码:
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"
?如果没有,请添加并重试