setRequestedOrientation之后的屏幕高度不正确

时间:2018-06-26 07:45:45

标签: android android-layout

我正在尝试将平板电脑的版式设置为横向,所以我有以下代码:

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但是,如果我在此调用后立即调用 getResources()。getDisplayMetrics()。widthPixels ,它将返回平板电脑的高度而不是宽度。仅在调用 onConfigurationChanged 之后,我才开始获得正确的高度,该高度发生在使用错误的屏幕尺寸对主布局进行充气之后。

我尝试在setRequestedOrientation之后这样做:

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

但这没有帮助。

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

P。 S.尽管我将方向设置为SCREEN_ORIENTATION_LANDSCAPE,但发生更改后,我仍然不断获得SCREEN_ORIENTATION_USER。为什么会这样?

2 个答案:

答案 0 :(得分:0)

您是否在清单的活动代码中添加了$amount - 1?如果没有,请添加并重试

答案 1 :(得分:0)

问题是您的代码在设置布局之前会计算宽度和高度。有一个叫做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(); 

    } 
});